2012-06-04 70 views
0

假設,我們下面的標記:爲什麼不生成onChange事件?

<form> 
    <button type="button" id="all">check all</button> 
    <button type="button" id="none">check none</button> 
    <input type="checkbox" value="one" /> 
    <input type="checkbox" value="two" /> 
    <input type="checkbox" value="three" /> 
</form> 

而且下面的JavaScript代碼:

(function($, document) { 
    $('#all').on('click', function() { 
     $('input', $(this).parent()).prop('checked', 'checked'); 
    }); 
    $('#none').on('click', function() { 
     $('input', $(this).parent()).removeProp('checked'); 
    }); 

    $('input').on('change', function() { 
     alert(this.value); 
    }); 
}(jQuery, document)); 

(見http://jsfiddle.net/inst/h7kyq/1/

爲什麼不輸入的onChange事件處理程序執行時,我們點擊任何按鈕?

+0

當使用'.prop()'上的布爾屬性,使用一個布爾值。 '.prop('checked',true)'或'.prop('checked',false)' –

+1

除非你想永久刪除屬性,否則不要使用removeProp(),因爲你不能再次使用/添加屬性元件。閱讀http://api.jquery.com/removeProp/正如你可以告訴你的小提琴一旦你點擊刪除所有選擇所有不再功能。 –

回答

1

任何程序上的變化(從腳本改變)的輸入元素將不會觸發onchange事件..

或者,當你改變了自己應該手動觸發更改事件狀態/值。

見下文

$('input', $(this).parent()).removeProp('checked').change(); 

DEMO:http://jsfiddle.net/h7kyq/4/

3

當javascript發生更改時,不會觸發事件。您需要自行觸發事件:

$('input', $(this).parent()).removeProp('checked').change(); 
+0

這是故意的行爲。事件在被代碼改變時不會被觸發,因爲它可能會無意中觸發我們寧可不運行的代碼,除非用戶是進行更改的代碼。 – saluce

相關問題