jquerylive问题:在selectlist过滤器函数中,live不适用于keyup事件

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

我有一个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="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。谢谢,你真的帮助了我。谢谢,你真的帮助了我。