Twitter引导模式发送双ajax请求

时间:2012-01-24 13:01:57

标签: ruby ajax twitter-bootstrap

我正在使用rails项目作为前端开发人员,我们使用twitter bootstrap ..所以我有一些搜索模式,当你输入内容并点击输入然后调用ajax并且搜索字段显示结果。 。

$('#search_term').live("keyup", function(event) {
if (event.keyCode == '13') {
doSearch(this);
}
});

当你点击进入时,有2个ajax调用..

我通过在live之前调用die()来修复它,现在它只发送一个请求,就像它应该有的那样..但是我不明白是什么问题?!

$('#search_term').die("keyup").live("keyup", function(event) {
if (event.keyCode == '13') {
doSearch(this);
}
});

任何人都可以解释为什么会这样吗?!

1 个答案:

答案 0 :(得分:0)

如果使用die()你可以解决问题,那么你可能会多次调用live方法。

 $('#search_term').on("keyup", function(event) {
  if (event.keyCode == '13') {
    console.log("ENTER!")
  }
});

$('#search_term').on("keyup", function(event) {
  if (event.keyCode == '13') {
    console.log("ENTER!")
  }
});

(重新编写代码,因为它已被弃用)

试试这个fiddle并打开开发者控制台。如果在输入内按Enter键,它将多次调用console.log() 在这个例子中,您要为keyup事件添加新功能,结果是当触发键盘时将触发所有功能。 相反.die(现在它是.off)删除以前添加的功能。见这个例子:

 $('#search_term').off("keyup").on("keyup", function(event) {
  if (event.keyCode == '13') {
    console.log("ENTER!")
  }
});

$('#search_term').off("keyup").on("keyup", function(event) {
  if (event.keyCode == '13') {
    console.log("ENTER!")
  }
});

现在尝试修改此fiddle,看看该函数只被调用一次。