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

4im*_*ble 170 javascript jquery javascript-events

我有一个工作正常的变更事件,但我需要让它来递减.

所以我有一个在更改时触发的函数,它将根据类选择器"更改"其他下拉菜单(注意"下拉",可能有多个).此代理更改不会触发该功能,因此失败.我怎样才能让它发挥作用?

$(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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

到目前为止,这些建议似乎有效,但随着更改事件触发ajax帖子,它现在似乎在这里失败了.我打算玩它,但这是我感觉到的另一个问题.

Joh*_*ock 368

使用trigger()方法

$(selector).trigger("change");
Run Code Online (Sandbox Code Playgroud)

  • @JoshPinter没有真正的好处,更多的是偏好.但是作为参数抽象比抽象方法名称更容易. (6认同)
  • 最新版本的 jQuery (3 atm) 在使用已弃用的简写“.change()”时会发出警告。您应该使用 `.trigger('change')` 来代替。 (3认同)
  • 对`change()`有什么好处吗?或者只是偏好? (2认同)

小智 26

对我来说$('#element').val('...').change()是最好的方式.


Fré*_*idi 20

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

$(document).ready(function() {
    $("#yourInitialElementID").change(function() {
        // Do something here...
        $(".yourDropDownClass").change();
    });
});
Run Code Online (Sandbox Code Playgroud)


Geo*_*ale 9

$(selector).change()
Run Code Online (Sandbox Code Playgroud)

.更改()


.trigger( "改变")

慢的替代方案,更好的抽象.

.trigger( "改变")

$(selector).trigger("change")
Run Code Online (Sandbox Code Playgroud)


Muh*_*had 5

使用那个:

$(selector).trigger("change");
Run Code Online (Sandbox Code Playgroud)

要么

$('#id').trigger("click");
Run Code Online (Sandbox Code Playgroud)

要么

$('.class').trigger(event);
Run Code Online (Sandbox Code Playgroud)

触发器可以是javascript支持的任何事件。.希望对您所有人来说都很容易理解。