jQuery中解绑点击事件后如何重绑定?Ajax完成后无法重绑定求助
解决按钮解绑后无法重新绑定点击事件的问题
首先看你代码里的几个关键问题:
- 重新绑定点击事件时
bind('click')没有传入原来的处理函数,相当于绑定了一个空回调,自然点击没反应 - 使用
async: false同步Ajax会阻塞浏览器,导致请求期间页面卡住,体验很差,且现在多数浏览器对同步Ajax的支持有限制 - 存在语法错误:
crossDomain: true应该放在Ajax配置对象内部,你写在外面了
给你调整后的代码,核心是把点击事件逻辑抽成独立函数,这样解绑和重新绑定都能复用:
// 把点击事件的逻辑抽成单独函数,方便复用 function handleSearchClick(event) { const $btn = $('#btnsearch'); // 先解绑事件,防止重复触发请求 $btn.off('click').text('Wait...'); $.ajax({ url: "//api/Ulyx/OrderDetails", type: "GET", dataType: "json", crossDomain: true, // 修正语法错误,移到配置对象内 // 移除async: false,改用异步请求,避免阻塞页面 complete: function() { // 恢复按钮文本,重新绑定点击事件 $btn.text('Search').on('click', handleSearchClick); } }); } // 页面加载完成后,初始绑定点击事件 $('#btnsearch').on('click', handleSearchClick);
另外补充个优化建议:
除了解绑事件,还可以给按钮添加disabled属性,让按钮在请求期间变灰不可点击,这样用户体验更直观,也能从视觉上避免重复点击:
function handleSearchClick(event) { const $btn = $('#btnsearch'); $btn.off('click').text('Wait...').prop('disabled', true); $.ajax({ url: "//api/Ulyx/OrderDetails", type: "GET", dataType: "json", crossDomain: true, complete: function() { // 恢复按钮状态与事件绑定 $btn.text('Search').prop('disabled', false).on('click', handleSearchClick); } }); } $('#btnsearch').on('click', handleSearchClick);
内容的提问来源于stack exchange,提问作者Sunil Kumar
相关产品推荐
相关产品推荐

