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

IT技术 javascript jquery jquery-events
2021-02-10 10:29:35

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

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

代码

$(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 帖子,它现在似乎在这里失败了。我会玩弄它,但这是我感觉的另一个问题。

5个回答

使用trigger() 方法

$(selector).trigger("change");
@JoshPinter 没有真正的好处,更多的是偏好。但绝对比方法名称更容易抽象为参数。
2021-03-23 10:29:35
在实际触发更改事件之前设置一个值是最好的方法!!
2021-03-25 10:29:35
这样做有什么好处change()吗?还是只是偏好?
2021-03-29 10:29:35
最新版本的 jQuery (3 atm) 将在使用已弃用的简写时发出警告.change()你应该.trigger('change')改用。
2021-04-09 10:29:35

给我

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

是最好的方法。

注意:.change()在较新的版本中不推荐使用.trigger('change')

是的!它允许同时选择选项。我认为你的答案应该是最好的。
2021-03-14 10:29:35
是的!,我喜欢这个
2021-03-18 10:29:35
现在已弃用。开发的所有最佳功能要素都被弃用了……是为了让开发人员始终学习新事物吗?
2021-04-02 10:29:35
这是以编程方式更改元素值时触发更改事件的唯一方法。
2021-04-03 10:29:35
@AmitShah 是的,我认为.change()在较新版本中已弃用,但.trigger('change')也可以使用。我认为 jQuery 团队厌倦了为函数制作快捷方式。当文档小得多时,也更容易找到要调用的正确函数。
2021-04-04 10:29:35

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

$(document).ready(function() {
    $("#yourInitialElementID").change(function() {
        // Do something here...
        $(".yourDropDownClass").change();
    });
});
此方法不会被弃用。
2021-04-06 10:29:35
$(selector).change()

。改变()


.触发器(“改变”)

更长更慢的替代方案,更适合抽象。

.触发器(“改变”)

$(selector).trigger("change")

使用那个:

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

或者

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

或者

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

触发器可以是 javascript 支持的任何事件.. 希望你们所有人都容易理解。