2012-02-20 53 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在鍵入之前觸發並且一個字符在鍵入之後進入輸入。