2012-02-20 54 views
0

我正在处理一个项目,并有一个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通话猜测,如果绑定字段不具有价值,它应该禁用表单的提交按钮。

就像我说的,这是“sorta”正常工作。障碍在于,它实际上就像是响应前一个键入的字符而不是新键入的字符。

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

  1. 在该字段中输入一个'x'。
    • 提交按钮不会启用。
  2. 在该字段中输入另一个'x'。
    • 提交按钮更改为启用。
  3. Backspace并删除一个'x'。
    • 提交按钮保持启用状态。
  4. Backspace再次将字段留空。
    • 提交按钮保持启用状态。
  5. 退格一次。
    • 提交按钮更改为禁用。

我一直在敲打我的头撞墙试图调试这和我厌倦了我的纺轮。 (更不用说从墙上的头痛)任何人都可以提供这个问题的解决方案,请?

+0

Keydown应该是keyup,所以事件会在新插入的字符后触发。 Keydown在键入之前触发并且一个字符在键入之后进入输入。 – 2012-02-20 01:57:59

+0

如果我使用keyup,我会得到一个错误,指出不存在这样的函数。 – Skittles 2012-02-20 01:58:43

+0

划痕。 O.o我不知道为什么会这样。我以前真的得到了这个错误,但现在我没有。这只是疯狂。谢谢 – Skittles 2012-02-20 02:00:08

回答

0

Keydown应该是keyup,所以事件会在新插入的字符后触发。 Keydown在键入之前触发并且一个字符在键入之后进入输入。