2013-03-11 52 views
1

我有一個文本輸入字段和一個複選框。當且僅當在文本字段中輸入時,該複選框必須被禁用。我有一個偉大工程大多數情況下的解決方案:通過鼠標操作更改瀏覽器文本輸入時的響應

HTML:

<input type="text" id="search" /> 
<input type="checkbox" id="cb" /> 
<label for="cb">Enabled only if no search term</label> 

的jQuery:

$('#search').keyup(function (e) { 
    var enable = $(this).val() == 0; 
    if (enable) { 
     $('#cb').removeAttr('disabled'); 
    } else { 
     $('#cb').attr('disabled', 'disabled'); 
    } 
}); 

看到它live on jsFiddle

這適用於使用鍵盤輸入或刪除文本以及使用鍵盤粘貼文本的情況。

如果用戶使用右鍵單擊上下文菜單粘貼文本,或者用戶按下IE添加到輸入字段以允許清除輸入字段的小「X」,則會失敗。

問題

我怎樣才能提高代碼,以便它也能在這些情況?等待文本框失去焦點將提供較差的用戶體驗。

+0

你可以使用[這裏]的Jquery Realtime驗證插件(http://www.zurb.com/playground/jquery-text-change-custom-event) – 2013-03-11 20:16:29

+0

@Cthulhu:看起來非常酷。去嘗試一下。 – 2013-03-11 20:27:26

+0

@Cthulhu:像魅力一樣工作!如果你想把你的評論變成一個答案(這不僅僅是一個鏈接),我會很高興接受它。 – 2013-03-11 20:47:09

回答

1

Real Time Validation jQuery插件來解決這個問題。但是,它具有委託事件not seem to work currently

實現此操作需要將事件綁定到keyup事件以及其他事件,如果要檢測剪切和粘貼上的文本更改。即使你是一位JavaScript之神,一次又一次地寫這個邏輯是很乏味的。做個聰明的人,改用ZURB文字變化事件插件。

0

您可以使用jQuery的改變方法:

http://jsfiddle.net/WDMCX/1/

$('#search').change(function() { 

    if($(this).val() === ''){ 
     $('#cb').attr('disabled', 'disabled'); 
    } else { 
     $('#cb').removeAttr('disabled'); 
    } 

}); 
+0

請解釋downvotes。如果我錯了,我想知道正確的方法,就像OP一樣。 – Lowkase 2013-03-11 20:21:47

+0

我沒有downvote,但*更改*將不會觸發,直到文本輸入字段失去焦點。由於焦點丟失可能會導致應該被禁用的複選框,因此不太理想的解決方案。不過,可能是唯一的解決方案。 – 2013-03-11 20:23:48

+0

啊,這很有道理,謝謝Eric J.的解釋。 – Lowkase 2013-03-11 20:24:38