zhangkaitao / es

JavaEE项目开发脚手架(我的公众号:kaitao-1234567,我的新书:《亿级流量网站架构核心技术》)
https://github.com/zhangkaitao/es
Apache License 2.0
2.17k stars 1.59k forks source link

data-change-search=true 时,鼠标向右侧移到搜索按钮上并点击,会触发2次turnSearch #35

Closed apei830 closed 10 years ago

apei830 commented 10 years ago

data-change-search=true 时,鼠标向右侧移到搜索按钮上并点击,会触发2次turnSearch

一次是input控件失去焦点,一次是搜索按钮触发

请问有什么方法能解决这个问题吗?我试了下在 下面代码加off("change")不起作用

searchForm.off("submit").on("submit", function() { turnSearch(table, searchForm, false); searchForm.find(":input:not(:button,:submit,:reset)").off("change") return false; });

zhangkaitao commented 10 years ago

data-change-search=false 即可 默认是数据改变(onchange) 就查

apei830 commented 10 years ago

对,我知道这个attr的用意,我的意思是说,如果这样用,实际上会发起2次请求, 一次是input空间失去焦点,一次是搜索按钮的submit 想问下有没有什么手段可以判断这种情况,中断第二次请求

zhangkaitao commented 10 years ago

告诉你下 可以使用setTimeout延迟执行 然后如果两次太快 可以cancel下 你试下 (该成功 我合并进来)

apei830 commented 10 years ago

你说的我还不是很清楚,但是我用一个变量标示下是否正在执行查询,如果下次进查询方法前就直接判断,有在执行则返回,没有则执行,执行成功把变量还原,这样可行不?

zhangkaitao commented 10 years ago

使用setTimeout设置超时时间 这样如果速度很快的话 可以先cancel上一次的调度 然后重新调度 就不会有这个问题了

apei830 commented 10 years ago

不过还是没思路,在哪设置timeout?在哪cancel,设置timeout后不就每次正常search都会等待固定时间吗?

apei830 commented 10 years ago

测试了几次,每次都是change事件先trigger,所以在下面代码里把submit的回调置为空,并return false,阻止触发默认的表单提交事件 searchForm.find(":input:not(:button,:submit,:reset)").off("change").on("change", function(e) { // avoid double search issue, when you click search button after change any input searchForm.off("submit").on("submit", function() { return false; }); turnSearch(table, searchForm, false); }); 终于解决了这个问题

zhangkaitao commented 10 years ago

哦 好 我把我的也改成这个