我正在使用早午餐来处理骨干,我遇到了event.preventdefault()的问题。它最初工作,但在页面更改后它停止工作。
我有一个视图,它将一个参数传递给模板,并根据该页面进行渲染。此页面有多个表单,并根据参数加载一个。所有表单都有防止默认绑定到提交按钮,但由于某种原因,在我使用其中一个导航链接切换表单后,preventdefault停止工作并且表单被发布。知道为什么会这样吗?如果您需要查看代码,请告诉我。
如何发生这种情况的一个例子: 我点击“提交故事”导航链接并输入内容并点击提交。我得到了js警报,没有任何反应。现在我点击“提交诗歌”并点击提交,但这次表格会被发布。如果我开始使用'提交诗',它就可以了。如果我点击“提交诗歌”并在提交前点击刷新,它也有效。奇怪的...
编辑:添加了代码示例。模板根据传入的类型进行渲染。
class exports.ClientsSettingsView extends UberView
id: 'settings_view'
className: 'view_container'
events:
'submit #credit_card_form' : 'addCard'
'submit #profile_pic_form' : 'processPicUpload'
'submit #edit_info_form' : 'test'
'click #delete_card' : 'deleteCard'
render: (type="info",status=0) ->
$('.spinner#submit').hide()
@ReadUserInfo()
$(@el).html clientsSettingsTemplate {type,status}
@FadeIn()
@
addCard: (e) ->
e.preventDefault()
$el = $(e.currentTarget)
attrs =
card_number: $el.find('#card_number').val()
card_code: $el.find('#card_code').val()
card_expiration_month: $el.find('#card_expiration_month').val()
card_expiration_year: $el.find('#card_expiration_year').val()
options =
success: (response) ->
alert "Added"
error: (e) ->
alert "Error"
model = new app.models.paymentprofile
model.save attrs, options
console.log attrs
答案 0 :(得分:1)
稍后如何加载其他表单并提交按钮?如果您动态地将它们拉入,则可能不再附加您的活动。您可以尝试使用jquery的实时方法将事件绑定到表单提交。
答案 1 :(得分:1)
我遇到了同样的问题。
解决方法
将Backbone.View添加到DOM后,手动调用delegateEvents()。
问题
我正在调用subview.remove()
删除所有DOM事件侦听器(通过jQuery.remove)并稍后使用相同的子视图实例。
解决方案
如果视图必须保持活动但必须暂时隐藏,请使用this.$el.hide()
& this.$el.show()
在其他情况下,不要重用Backbone.View实例,而是实例化new
个实例。