标签:例子 submit 抓取 track highlight 任务 连续 服务 大神
博主最近在项目中遇到一个挺头大的问题,点击按钮触发一次ajax,但是实际中会发现ajax提交次数会随着点击次数递增,十分头疼,
找了度娘之后发现ajax请求一次就绑定一次,解决办法是可以再出发下一次之前先将事件解除绑定,再添加上事件便不会多次出发。
总结起来就是:一般绑定事件后,触发多次的原因是,在其他地方也绑定过。如果实在找不到在哪里绑定过可以这样:在绑定事件之前,
先用unbind()方法或者off()方法解绑后,再重新绑定一下。再就是不排出是否是其他标签事件冒泡到这个标签上来了的可能性。
博主觉得很有意思便多研究了下,现在将组织多次出发的方法也附在下面:
A. 独占型提交只允许同时存在一次提交操作,并且直到本次提交完成才能进行下一次提交
module.submit = function() {
if (this.promise_.state() === ‘pending‘) {
return
}
return this.promise_ = $.post(‘/api/save‘)
}
module.submit = function() {
if (this.promise_.state() === ‘pending‘) {
this.promise_.abort()
}
// todo
}
module.submit = throttle(150, function() {
// todo
})
module.submit = debounce(150, function() {
// todo
})
var scrape = memoize(function(url) {
return $.post(‘/scraper‘, { ‘url‘: url })
})
var request = makePile(5, function() {
$.post(‘/‘, { list: JSON.stringify([].slice.call(arguments)) })
})
// 连续发送五次
request({a:1}), request({a:2}), request({a:3}), request({a:4}), request({a:5})
/* post =>
list:[{"a":1},{"a":2},{"a":3},{"a":4},{"a":5}]
*/
var makePile = function(count, onfilter, onvalue) {
var values = [], id = function(value) { return value }
return function(value) {
values.push((onvalue || id).apply(this, arguments))
if (values.length === count) {
onfilter.apply(this, values)
values = []
}
}
}
var trackFactory = function(delay, action) {
var params = [], slice = [].slice
var touch = debounce(delay, function() {
if (params.length) {
action(params)
params = []
}
})
return function() {
params.push(slice.call(arguments))
touch()
}
}
var track = trackFactory(550, function(params) {
// send tracking request
})
autoload.listen(feeds, ‘next‘, sample(3, function() {
this.enable()
}))
O-O-X-O-O-X
X-X-O-X-X-O
options { sample: (n) => n % 3 !== 0 }
标签:例子 submit 抓取 track highlight 任务 连续 服务 大神
原文地址:http://www.cnblogs.com/sxcflyhigher/p/6517399.html