如何在代码中触发 jQuery 更改事件

2022-08-30 01:05:43

我有一个工作正常的更改事件,但我需要让它递归。

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

法典

$(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帖子,因此现在似乎在这里失败了。我将尝试使用它,但这是我觉得的另一个问题。


答案 1

使用触发器() 方法

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

答案 2

给我的

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

是最好的方法。

注意:在较新版本中使用时已弃用。.change().trigger('change')