在文本框值更改而不是键盘事件上触发函数

时间:2011-07-06 17:18:15

标签: javascript ajax jquery

以下代码目前仅在keyup事件发生时生成搜索查询。在我开始使用webkit之前,这一直不是问题,现在可以在不按任何键的情况下清除搜索字段(通过单击搜索字段中的“x”)。

只要搜索框发生变化,是否可以触发相同的功能?

我试图用.change替换.keyup,但在搜索框中发生更改时似乎没有产生任何响应。

$('#search').keyup(function(e){
  e.preventDefault();
  search = $(this).val();
  $.ajax({
    url: '/lists.xml?search='+search,
    dataType: "xml",
    success: parseXML
  });
}); 

任何帮助将不胜感激!

编辑:经过一些进一步的研究后,我发现了example

以下代码与上述代码结合使用:

$('#search').click(function(e){
  if($(this).val()==""){
  e.preventDefault();
  search = $(this).val();

  $.ajax({
    url: '/lists.xml?search='+search,
    dataType: "xml",
    success: parseXML
  });
  }
});  

3 个答案:

答案 0 :(得分:1)

据我所知,仅当您将焦点从文本框中移开时,才会发生更改,模糊和焦点事件。然后他们只检查以前的值是否与原始值相同。

因此,如果前一个值为“”并且您键入“asdf”,并单击远离文本框以失去焦点,则您的函数将会触发。所以现在价值是“asdf”。如果输入“asdfeee”,则删除“eee”并将焦点移开,事件将不会触发,因为该值仍将等于“asdf”。

我认为这里最简单的解决方案是离开keyup事件处理程序,只需添加一个click事件处理程序,它完成同样的事情来解释WebKit的行为。

答案 1 :(得分:0)

$('#search').blur(function(e) {  // you may use `focus`
    search = $(this).val();
    if (search != null || search != '') {
        $.ajax({
            url: '/lists.xml?search=' + search,
            dataType: "xml",
            success: parseXML
        });
    }
});

答案 2 :(得分:0)

经过一些进一步的研究,我找到了解决自己问题的方法。为了考虑webkit功能,我添加了2个事件处理程序,如下所示。这不是一个完美的解决方案,但它现在会做...

$('#search').keyup(function(e){
  e.preventDefault();
  search = $(this).val();
  $.ajax({
    url: '/lists.xml?search='+search,
    dataType: "xml",
    success: parseXML
  });
}); 

$('#search').click(function(e){
  if($(this).val()==""){
  e.preventDefault();
  search = $(this).val();

  $.ajax({
    url: '/lists.xml?search='+search,
    dataType: "xml",
    success: parseXML
  });
  }
});  

example有助于推导出解决方案。