javascript - 如何在程式碼中觸發 jQuery 的 change 事件
我有一個變更事件運作正常,但我需要讓它遞歸。
所以我有一個在變更時觸發的函數,它會根據類選擇器“更改”其他下拉選單(注意“drop downS”,可能不只一個)。這個代理變更不會觸發該函數,因此會失敗。我該如何讓它運作?
程式碼
$(document).ready(function () {
var activeDropBox = null;
$("select.drop-box").change(function () {
var questionId = $(this).attr("questionId");
var selectedAnswer = $(this).val();
activeDropBox = this;
alert(this.questionId);
$.ajax(
{
type: "POST",
url: answerChangedActionUrl,
data: { questionId: questionId, selectedValue: selectedAnswer },
success: function (data) {
SetElementVisibility(data.ShowElement, questionId);
}, error: function (XMLHttpRequest, textStatus, errorThrown) {
alert('XMLHttpRequest:' + XMLHttpRequest.responseText);
alert('textStatus:' + textStatus);
alert('errorThrown:' + errorThrown);
}
});
});
function SetElementVisibility(visible, questionId) {
// I would like each child to then trigger the change event...
$(".childOf" + questionId)[visible ? 'show' : 'hide']('slow');
// Suggested code
//$(".childOf" + questionId + " select").trigger("change");
if (!visible) {
$(".childOf" + questionId + " select").attr('selectedIndex', 0);
}
}
}
到目前為止的建議似乎有效,但由於變更事件觸發了 ajax post,它現在似乎在這裡失敗。我打算稍微試試,但我覺得這是另一個問題的範疇。
答案#1
使用 trigger() 方法
$(selector).trigger("change");
答案#2
對我來說
$('#element').val('...').change()
是最好的方法。
注意:
.change()在較新的版本中已被棄用,請改用.trigger('change')。
答案#3
不帶參數的 change() 方法會觸發一個 change 事件。你可以這樣寫:
$(document).ready(function() {
$("#yourInitialElementID").change(function() {
// Do something here...
$(".yourDropDownClass").change();
});
});
答案#4
$(selector).change()
.change()
.trigger("change")
較長且較慢的替代方式,更適合抽象化。
.trigger("change")
$(selector).trigger("change")
答案#5
使用那個:
$(selector).trigger("change");
或
$('#id').trigger("click");
或
$('.class').trigger(event);
觸發器可以是任何 JavaScript 支援的事件。希望這對你們所有人來說都容易理解。
