没有为jQuery选择的select字段触发骨干更改事件

时间:2014-12-16 23:58:50

标签: javascript jquery backbone.js

我有一个按钮,单击该按钮可设置选择字段的值,并且还具有选择字段的更改事件。更改选择[name = location_id]'当通过鼠标/键盘正常选择但点击使用jQuery更改选择字段值的按钮时,事件有效,并且不会触发更改选择[name = location_id]'事件

如何更改选择[name = location_id]'通过jQuery更改字段时触发?

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'));
    }
  });

3 个答案:

答案 0 :(得分:2)

更新

此外,请忽略以下答案,因为根据MDN input event docsinput事件仅针对<input><textarea>触发,并且不会针对{{1}触发},因为<select>的{​​{1}}在选择任何选项时都不会更改(顺便说一句,value <select> 复选框 radio 也不会发出<input>事件,因为他们的type属性在选择时未更改()。

我会留下答案供参考。


以下内容不正确

来自 MDN

  

当用户提交对元素值的更改时,会为inputvalue<input>元素触发更改事件。与输入事件不同,对于元素值的每次更改,都不一定会触发更改事件。

根据Quirksmode<select>事件对于所有IE和Opera来说都是错误的。

尝试替换

<textarea>

change

答案 1 :(得分:1)

您只需添加一个活动:

this.$('select[name=location_id]').val(this.model.get('hd_location_id')).trigger('change');

答案 2 :(得分:0)

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

elem.trigger('change')

http://api.jquery.com/trigger/

相关问题