Javascript 在文本框值更改而不是键控事件上触发函数
下面的代码当前仅在keyup事件发生时生成搜索查询。在我开始使用webkit之前,这不是一个问题,现在可以不按任何键(通过单击搜索字段中的“x”)清除搜索字段 当搜索框中出现更改时,是否可以启动相同的功能 我曾尝试用.change替换.keyup,但当搜索框中发生更改时,似乎不会产生任何响应Javascript 在文本框值更改而不是键控事件上触发函数,javascript,ajax,jquery,Javascript,Ajax,Jquery,下面的代码当前仅在keyup事件发生时生成搜索查询。在我开始使用webkit之前,这不是一个问题,现在可以不按任何键(通过单击搜索字段中的“x”)清除搜索字段 当搜索框中出现更改时,是否可以启动相同的功能 我曾尝试用.change替换.keyup,但当搜索框中发生更改时,似乎不会产生任何响应 $('#search').keyup(function(e){ e.preventDefault(); search = $(this).val(); $.ajax({ url: '/l
$('#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
});
}
});
据我所知,更改、模糊和聚焦事件只有在您将焦点从文本框移开时才会发生。然后他们只检查前一个值是否与原始值相同 因此,如果上一个值为“”,并且键入“asdf”,然后从文本框中单击以失去焦点,则函数将启动。所以现在的值是“asdf”。如果键入“asdfeee”,则删除“eee”并将焦点移开,事件将不会触发,因为该值仍将等于“asdf”
我认为这里最简单的解决方案是离开keyup事件处理程序,简单地添加一个click事件处理程序,该处理程序执行与WebKit行为完全相同的操作。经过进一步研究,我找到了解决我自己问题的方法。为了说明webkit的功能,我添加了两个事件处理程序,如下所示。这不是一个完美的解决方案,但现在就可以了
$('#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
});
}
});
这有助于得出解决方案。您的事件是为
键控启动的
,您可以使用聚焦
或模糊
@shyvy88如果不起作用,请评论,我将进一步尝试。我已向搜索字段添加了一个单击事件,但每次单击该字段时都会启动搜索。我添加了一个if语句,仅当字段被清除时才触发搜索,这就是单击webkit“x”时发生的情况。在编辑代码的原始问题中还发现了我的编辑。
$('#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
});
}
});