私は、正常に動作している変更イベントを持っていますが、それを再発させる必要があります。
そのため、クラスセレクタに基づいて他のドロップダウンを「変更」する変更をトリガーとする関数があります(「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);
}
}
}
これまでのところ提案はうまくいくように思われますが、changeイベントがajax投稿を引き起こすのでここでは失敗するようです。私はそれを試してみるつもりですが、それは私が感じる別の質問のためのものです。
trigger()メソッド を使う
$(selector).trigger("change");
私にとっては$('#element').val('...').change()
が最善の方法です。
パラメータなし形式の change() メソッドはchange
イベントを発生させます。次のように書くことができます。
$(document).ready(function() {
$("#yourInitialElementID").change(function() {
// Do something here...
$(".yourDropDownClass").change();
});
});
それを使う:
$(selector).trigger("change");
OR
$('#id').trigger("click");
OR
$('.class').trigger(event);
トリガーは、JavaScriptがサポートするイベントであればどれでも可能です。