Javascript 未为jQuery选择的选择字段触发主干更改事件

Javascript 未为jQuery选择的选择字段触发主干更改事件,javascript,jquery,backbone.js,Javascript,Jquery,Backbone.js,我有一个按钮,单击该按钮可以设置选择字段的值,还可以为选择字段设置一个更改事件。当通过鼠标/键盘正常选择时,“更改选择[name=location\u id]”事件起作用,但单击使用jQuery更改选择字段值的按钮不会触发“更改选择[name=location\u id]”事件 在通过jQuery更改字段时,如何让“change select[name=location\u id]”触发 SubscriptionsModule.Views.SubscriptionEditView = Backb

我有一个按钮,单击该按钮可以设置选择字段的值,还可以为选择字段设置一个更改事件。当通过鼠标/键盘正常选择时,“更改选择[name=location\u id]”事件起作用,但单击使用jQuery更改选择字段值的按钮不会触发“更改选择[name=location\u id]”事件

在通过jQuery更改字段时,如何让“change select[name=location\u id]”触发

SubscriptionsModule.Views.SubscriptionEditView = Backbone.Marionette.LayoutView.extend({
    template: "subscriptions/edit",
    events: {
      'click #home-delivery-select': 'selectHomeDeliverySite',
      'change select[name=location_id]': 'updateLocation'
    },
    selectHomeDeliverySite: function() {
      this.$el.find('select[name=location_id]').val(this.model.get('hd_location_id'));
    },
    updateLocation: function(e) {
      //update location code
    },
    updateOrderSize: function(e) {
      SubscriptionsModule.eventManager.trigger('updateOrderSize', $(e.currentTarget).data('price'));
    }
  });

您只需添加一个事件:

this.$('select[name=location_id]').val(this.model.get('hd_location_id')).trigger('change');
更新 另外,请忽略下面的答案,因为根据,输入事件只针对
触发,不会针对
触发,因为
值在选择其任何选项时不会更改(顺便说一句,
带有
类型
复选框或收音机也不会发出
输入
事件,因为它们的
属性在选择时不会更改(!)

我将把答案留作参考


以下是不正确的 从

当用户提交对元素值的更改时,将为
元素触发更改事件。与输入事件不同的是,不一定为元素值的每次更改触发更改事件

据了解,
change
事件对于所有IE和Opera来说都是错误的

试着替换

'change select[name=location_id]': 'updateLocation'


要在使用jquery更改某些内容后触发主干上的更改事件,需要触发更改事件

elem.trigger('change')


我希望这能起作用,但看起来输入事件只对和元素有效。被忽略了!不,没有。我刚刚测试了它…你完全正确。感谢你查找它!即使使用
val()设置值,jQuery也不会触发更改
,所以为了让主干能够监听该事件,我们必须以编程方式触发它。jQuery文档中并没有真正记录它,但它是如何工作的。
'input select[name=location_id]': 'updateLocation'