等待一个变量来改变值

问题描述:

我有一个文本框,并且每次用户按下一个键时,我计算该字段的新长度以查看仍有多少个字符可用。 基于这个数字,我:等待一个变量来改变值

  1. 检查,如果“发送”按钮应该启用或不
  2. 检查,如果显示的长度应为红色或黑色(点菜Twitter)上的计数器

但现在我有一个问题;每个的keydown事件,我做的:

remaining = 100 - count; 

if (remaining > 9) 
{ 
    //blue counter; send is activated 
    //"if counter.class == red then counter.class = blue..." 
    //"send.off('click'); send.on('click', sendmessage)..." 
} 
else if ((remaining <= 9) && (remaining >= 0)) 
{ 
    //red counter; send is activated 
} 
else //remaining <0 
{ 
    //red counter; send is deactivated 
} 

每次用户按下一个键后,3个集团的一个执行......是不是有办法执行集团只有当变量发生变化“区域”(]∞, 9[; [9,0]; ]0; -∞[)?

+0

计数怎么能小于零? – nnnnnn 2012-02-29 09:39:38

+0

我的不好,它实际上是剩余的字符数(再次,像140的限制一样的twitter) – Manu 2012-02-29 09:41:27

+1

你使用jQuery吗? (我注意到'send.off(...)') – nnnnnn 2012-02-29 09:51:15

毫无疑问,这可能是更优雅的完成,但答案很简单,只是要记住长度的前值:

var prevCount = 10; 

function checkLength() { 
    var count = // your logic to get current count here 

    if (count > 9 && prevCount <=9) { 
     // count has changed to > 9 
    } else if (count <=9 && count >= 0 && (prevCount > 9 || prevCount < 0) { 
     // count has changed to <=9 
    } else if (count < 0 && prevCount >= 0) { 
     // count has changed to < 0 
    } 

    prevCount = count; 
} 

初始化prevCount任何值有意义时,屏幕加载...

(PS计数怎么能小于零?)

更新:既然你已经确认你正在使用jQuery你可以做这样的事情(假设“黑”与“红”是在样式表类有适当的颜色和格式设置):

$(document).ready(function() { 
    var limit = 100, 
     $rem = $("#remaining").addClass("black"), 
     $send = $("input"); 

    $("textarea").on("keydown keyup", function() { 
     var len = $(this).val().length, 
      remaining = limit - len; 

     $rem.text(remaining); 
     $send.prop("disabled", len === 0 || remaining < 0); 

     if (remaining <=9 && $rem.hasClass("black") 
      || remaining > 9 && $rem.hasClass("red")) 
      $rem.toggleClass("black red"); 
    }).keydown(); 
});​ 

禁用发送按钮,如果有任何文字或太多文字;仅在必要时将班级从黑色更改为红色。 (您也可以使黑的默认,只是打开和关闭“红色”类)。

演示:http://jsfiddle.net/ZAjez/