javascript - 等待变量改变值

标签 javascript algorithm optimization

我有一个文本框,每次用户按下一个键时,我都会计算该字段的新长度以查看仍有多少字符可用。 根据这个数字,我:

  1. 检查是否应该启用“发送”按钮
  2. 检查显示长度的计数器应该是红色还是黑色(在推特上)

但是现在我遇到了一个问题;在每个 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 个 blocs 中的一个...难道没有办法只在变量更改“zone”时执行 blocs ( ]∞, 9[; [9,0]; ]0; -∞[) ?

最佳答案

毫无疑问,这可以做得更优雅,但简单的答案就是记住长度的先前值:

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 初始化为屏幕加载时有意义的任何值...

(附:计数怎么可能小于零?)

更新:由于您已确认您正在使用 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/

关于javascript - 等待变量改变值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9496624/

相关文章:

java - 如何使用 java 将十六进制转换为十进制 rgb565?

c# - 处理动画工具数据存储的最有效/最快速的方法

javascript - 从对象键获取引用数组的最快方法

javascript - 动态颜色编码数字

algorithm - 数学算法题

java - C 比 JAVA 执行时间更长

c# - 获取 boolean 数组中 false 元素的所有索引的最快方法是什么?

Javascript 用缺少的对象和值填充数组

HtmlDataTable(richfaces)渲染上的javascript函数

javascript - 在代码后面调用 window.onload 函数不起作用