jQuery测试字段中的值的存在不正常

时间:2012-02-20 01:53:44

标签: jquery

我正在开发一个项目并且有一个jQuery事件处理程序,我试图在输入时检测字段中用户输入数据的存在。它有一种奇怪的一面,它有我对于为什么会发生这种情况有点困惑。

我写的例程就是这个;

$(document).ready(function() {
  $('#salary_bal').on('change blur keydown', function() {
    if($(this).val.length === 0 || $(this).val() === '') {
      setSubmitState('off');
    } else {
      setSubmitState('on');
    }
  });
});

function setSubmitState(state) {
  switch(state) {
    case 'on':
      $('#fsSubmit').attr('disabled', false);
      $('#fsSubmit').addClass('button');
      $('#fsSubmit').addClass('cursor');
    break;
    case 'off':
      $('#fsSubmit').attr('disabled', true);
      $('#fsSubmit').removeClass('button');
      $('#fsSubmit').removeClass('cursor');
    break;
  }
}

正如你可以通过setSubmitState调用猜测的那样,如果绑定字段没有值,它应该禁用表单的提交按钮。

像我说的那样,这是“有点”正常工作。问题在于,它实际上就像是在响应前一个键入的字符,而不是一个新键入的字符。

这是动作序列及其各自的结果;

  1. 在字段中输入单个“x”。
    • “提交”按钮未启用。
  2. 在字段中输入另一个“x”。
    • 提交按钮更改为已启用。
  3. 退格并删除一个'x'。
    • 提交按钮保持启用状态。
  4. Backspace再次将字段留空。
    • 提交按钮保持启用状态。
  5. 退格一次。
    • 提交按钮更改为已禁用。
  6. 我一直在撞墙试图调试这个,我厌倦了旋转我的车轮。 (更不用说墙上的头痛了)有人可以提供这个问题的解决方案吗?

1 个答案:

答案 0 :(得分:0)

Keydown应该是keyup,因此在新插入的角色之后会触发事件。 Keydown在keyup之前触发,一个角色在keyup之后进入输入。