【问题标题】:How to trigger jQuery change event in code如何在代码中触发 jQuery 更改事件
【发布时间】:2011-05-13 22:24:14
【问题描述】:

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

所以我有一个在更改时触发的函数,它将基于类选择器“更改”其他下拉菜单(注意“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);
        }
    }
}

到目前为止,这些建议似乎有效,但由于更改事件触发了 ajax 帖子,它现在似乎在这里失败了。我会玩弄它,但这是我觉得的另一个问题。

【问题讨论】:

  • 提供一些代码让我们看看
  • 如果您还没有向我们展示 it 是什么,我们如何告诉您如何让它发挥作用?
  • 我认为这是一个简单的概念,并不觉得需要代码。到目前为止的答案似乎已经理解了我的解释,所以我现在正在尝试他们的解决方案。如果我没有任何快乐,我会发布一些代码。我的实现实际上要复杂得多。
  • 对其进行了排序,这是我在 ajax 发布后更改值的问题。谢谢大家的帮助。发布的建议很有魅力。

标签: javascript jquery jquery-events


【解决方案1】:

对我来说

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

是最好的方法。

注意:.change() 在较新版本中已弃用,请改用.trigger('change')

【讨论】:

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

.change()


.trigger("改变")

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

.trigger("change")

$(selector).trigger("change")

【讨论】:

    【解决方案3】:

    使用那个:

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

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

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

    触发器可以是javascript支持的任何事件。希望大家容易理解。

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

      • 这个方法没有被弃用。
      【解决方案5】:

      使用trigger() method

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

      【讨论】:

      • 这对change() 有什么好处吗?还是只是偏好?
      • @JoshPinter 没有真正的好处,更多的是偏好。但绝对比方法名更容易抽象为参数。
      • 在实际触发更改事件之前设置一个值是最好的方法!!
      • 最新版本的 jQuery (3 atm) 将在使用已弃用的简写 .change() 时发出警告。你应该改用.trigger('change')
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-12
      • 2013-10-24
      • 2012-06-16
      • 1970-01-01
      相关资源
      最近更新 更多