2013-04-17 106 views
22

是否可以使用javascript/jquery觸發複選框上的更改事件?複選框上的jQuery觸發器更改事件

像這樣的東西(我的一個按鍵,點擊運行triggerChange):

<label><input type="checkbox" id="chk"/>Label for chk</label> 

<script> 
function triggerChange(){ 
    $("#chk").trigger("change"); 
} 
</script> 

當我運行上面的代碼中,我得到這個錯誤:「觸發器是不是一個函數」。

+2

當然這是可能的。很可能你忘記了包含jQuery。 – VisioN

+0

我想你會對這個問題感興趣: http://stackoverflow.com/questions/10159214/why-does-dynamically-changing-a-checkbox-not-trigger-a-form-change-event Don忘記放在$(document).ready上下文中! –

+0

聽起來像'$'返回的不是jQuery對象。這意味着'$'可能不是jQuery?另請注意,觸發change事件只會運行change事件處理程序,它不會改變複選框的狀態。 –

回答

15

trigger is not a function錯誤消息表示別的東西在作怪。根據這太問題:

What happens when a jQuery selector wasn't found?

no.good.at.coding說:

Do note however that you must ensure that selector is a jQuery object! Otherwise, you could get an error indicating that "trigger is not a function".

這可能是因爲你已經忘記了jQuery的?


至於你的實現,你應該罰款你使用它的方式。但是應該使用trigger來觸發已經通過jQuery連接的元素上的事件方法。看看我的演示:

小提琴:
隨着click事件:http://jsfiddle.net/fS4R5/1/
如果沒有點擊事件:http://jsfiddle.net/fS4R5/2/

HTML:

<label><input type="checkbox" id="chk"/>Label for chk</label> 

JS:

function triggerChange(){ 
    $("#chk").trigger("change"); 
} 

$("#chk").change(function() { 
    alert("triggered!"); 
}); 

triggerChange(); 
+0

如果未連接,瀏覽器將不會引發*「觸發器不是函數」*異常。 jQuery對此進行了調整。 – VisioN

+0

謝謝,我的答案更新了有關例外的詳細信息。 – Jace

+0

我對點擊事件不感興趣。我有我的理由不要使用點擊。我想觸發更改事件而不點擊複選框。 –

4

在jQuery中,通常可以通過調用它的任何函數參數的eventhandler方法觸發事件。

例如一個單擊處理程序可以被指定爲這樣的:

$('#mything').click(function(e){dostuff});

本身的單擊事件可以觸發通過簡單地運行: $('#mything').click();

我懷疑這可以爲每個完成jQuery中的現有事件。

+2

你也可以用'.trigger(「click」)來調用它。沒有什麼問題。 – VisioN

+0

我對點擊事件不感興趣。我有我的理由不要使用點擊。我想觸發更改事件而不點擊複選框。 –

+0

那麼'點擊'只是一個例子。你可以用函數'change'替換它。作爲參考:http://api.jquery.com/change/ –

1

我認爲從1.9.1開始的首選方法是'on'。特別是如果你使用動態添加複選框。

假設你有一個ID =「divCOntent」和它與ID =「cballaut」複選框一個div,你可以這樣做

$('#divcontent').on('click', '#cballaut', function (e) { 
        alert(this.checked); 
       }); 
+0

這很難回答這個問題。 – VisioN

0

使用道具方法。

$('#myCheck').prop('checked', true); 
$('#myCheck').prop('checked', false); 
+0

這不會觸發更改事件。 – xaviert

相關問題