我有一个按钮,单击该按钮可设置选择字段的值,并且还具有选择字段的更改事件。更改选择[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'));
}
});
答案 0 :(得分:2)
此外,请忽略以下答案,因为根据MDN input
event docs,input
事件仅针对<input>
和<textarea>
触发,并且不会针对{{1}触发},因为<select>
的{{1}}在选择任何选项时都不会更改(顺便说一句,value
<select>
复选框或 radio 也不会发出<input>
事件,因为他们的type
属性在选择时未更改(!)。
我会留下答案供参考。
来自 MDN
当用户提交对元素值的更改时,会为
input
,value
和<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)