【问题标题】:Wait for a variable to change value等待变量改变值
【发布时间】:2012-02-29 09:36:55
【问题描述】:

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

  1. 检查是否应启用“发送”按钮
  2. 检查显示长度的计数器是红色还是黑色 (à la 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
}

每次用户按下一个键时,三个块中的一个被执行......只有当变量更改“区域”时,没有办法执行块(]∞, 9[;[9,0];@987654324 @) ?

【问题讨论】:

  • 计数怎么会小于零?
  • 我的错,这实际上是剩余的字符数(再次,就像 twitter 有 140 个限制)
  • 你在使用 jQuery 吗? (我注意到send.off(...)

标签: javascript algorithm optimization


【解决方案1】:

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

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

(P.S. 计数怎么会小于零?)

更新:既然你已经确认你正在使用 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/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多