jquerylive问题:在selectlist过滤器函数中,live不适用于keyup事件
我有一个jQuery脚本,它过滤html选择列表。 当我使用keyup事件时,它工作得很好,但是我最近尝试使用livekeyup来代替它,但是它不工作 以下是脚本:jquerylive问题:在selectlist过滤器函数中,live不适用于keyup事件,jquery,Jquery,我有一个jQuery脚本,它过滤html选择列表。 当我使用keyup事件时,它工作得很好,但是我最近尝试使用livekeyup来代替它,但是它不工作 以下是脚本: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns=&quo
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta name="Description" content="" />
<meta name="Keywords" content="" />
<meta name="Distribution" content="Global" />
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=9" />
<title>Select list filter</title>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script type="text/javascript">
//simple keyup
;(function($) {
$.fn.selectFilter = function() {
var sel = $(this);
$(this).after("<input style='display: block;' type='text' />");
$(this).css("display", "block");
if($(this).attr("size")<2)
{
$(this).attr("size", "3");
}
$(this).next("input[type='text']").keyup(function(){
sel.children('option').hide();
var a = new Array();
var txt = $(this).val().toLowerCase();
sel.children('option').each(function(i, selected){
var pattern=new RegExp(txt);
var value = $(this).text().toLowerCase();
if(pattern.test(value))
{
$(selected).show();
}
});
});
};
})(jQuery);
//live keyup
;(function($) {
$.fn.liveSelectFilter = function() {
var sel = $(this);
$(this).after("<input style='display: block;' type='text' />");
$(this).css("display", "block");
if($(this).attr("size")<2)
{
$(this).attr("size", "3");
}
$(this).next("input[type='text']").live("keyup", function(){
sel.children('option').hide();
var a = new Array();
var txt = $(this).val().toLowerCase();
sel.children('option').each(function(i, selected){
var pattern=new RegExp(txt);
var value = $(this).text().toLowerCase();
if(pattern.test(value))
{
$(selected).show();
}
});
});
};
})(jQuery);
jQuery(document).ready(function(){
jQuery("#select-list").selectFilter();
jQuery("#live-select-list").liveSelectFilter();
});
</script>
</head>
<body>
<form action="" method="post">
Keyup:
<select id="select-list" size="5" name='test' style="width:200px">
<option value='1'>John Smith</option>
<option value='2'>John Doe</option>
<option value='3'>Jason Bradley</option>
<option value='4'>Bob Smith</option>
<option value='5'>Jane Doe</option>
<option value='6'>David White</option>
<option value='7'>Neal Johnson</option>
<option value='8'>Richard Bradman</option>
</select>
<br /><br />Live keyup:
<select id="live-select-list" size="5" name='test' style="width:200px">
<option value='1'>John Smith</option>
<option value='2'>John Doe</option>
<option value='3'>Jason Bradley</option>
<option value='4'>Bob Smith</option>
<option value='5'>Jane Doe</option>
<option value='6'>David White</option>
<option value='7'>Neal Johnson</option>
<option value='8'>Richard Bradman</option>
</select>
</form>
</body>
</html>
如何解决此问题?问题在于,它使用选择器而不是指定的元素
从文件中引用
现在和将来,为与当前选择器匹配的所有元素将处理程序附加到事件
及
DOM遍历方法不是
支持查找要发送的元素
活下去。而是.live方法
应始终在之后直接调用
选择器,如上面的示例所示
因此,您应该更改将实时事件绑定到的方式
$(this.selector + " + input[type='text']").live("keyup", function(){
this.selector将返回使用的原始选择器,+input[type='text']是
live at问题在于它与选择器一起工作,而不是与指定的元素一起工作
从文件中引用
现在和将来,为与当前选择器匹配的所有元素将处理程序附加到事件
及
DOM遍历方法不是
支持查找要发送的元素
活下去。而是.live方法
应始终在之后直接调用
选择器,如上面的示例所示
因此,您应该更改将实时事件绑定到的方式
$(this.selector + " + input[type='text']").live("keyup", function(){
this.selector将返回使用的原始选择器,+input[type='text']是
live at您使用的浏览器是什么?这对我来说似乎很好,我试过Chrome、Safari和FF。你使用什么浏览器?这对我来说似乎很好,我试过Chrome、Safari和FF。谢谢,你真的帮助了我。谢谢,你真的帮助了我。