博主最近在项目中遇到一个挺头大的问题,点击按钮触发一次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-XX-X-O-X-X-Ooptions { sample: (n) => n % 3 !== 0 }
原文:http://www.cnblogs.com/sxcflyhigher/p/6517399.html