我有一个变化事件,工作得很好,但我需要让它递归。

所以我有一个函数,在改变时被触发,它将“改变”其他基于类选择器的下拉列表(注意“下拉列表”,可能有多个)。此代理更改不会触发该函数,因此会失败。我怎样才能让它工作呢?

Code

$(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 post时,它现在似乎失败了。我将会尝试一下但那是另一个问题了。


使用trigger()方法

$(selector).trigger("change");

change()方法的无参数形式会触发一个change事件。你可以这样写:

$(document).ready(function() {
    $("#yourInitialElementID").change(function() {
        // Do something here...
        $(".yourDropDownClass").change();
    });
});

对我来说

$('#element').val('...').change()

是最好的办法。

注意:.change()在新版本中已弃用,请使用.trigger('change')代替。


$(selector).change()

.change ()


触发器(“改变”)。

更长更慢的选择,更适合抽象。

触发器(“改变”)。

$(selector).trigger("change")

使用它:

$(selector).trigger("change");

OR

$('#id').trigger("click");

OR

$('.class').trigger(event);

触发器可以是javascript支持的任何事件。希望这对你们来说很容易理解。