以下代码目前仅在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
});
}
});
答案 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有助于推导出解决方案。