Javascript 如何选中列表中仅筛选的所有项目

Javascript 如何选中列表中仅筛选的所有项目,javascript,jquery,Javascript,Jquery,我有一个使用Jquery和java脚本的复选框列表的搜索过滤器…还有Checkall和UncheckAll单选按钮…如果我启用Checkall按钮…它将选中该列表中的所有复选框…如果我使用搜索过滤器过滤列表,它也将选中该列表中的所有复选框 现在我只想检查列表中的筛选项是否应该被选中,如果我单击checkall。。。。 如果我不筛选,则表示它将检查列表中的所有项目 我的密码在下面 检查所有编码: <script> function checkall(formname,checkname

我有一个使用Jquery和java脚本的复选框列表的搜索过滤器…还有Checkall和UncheckAll单选按钮…如果我启用Checkall按钮…它将选中该列表中的所有复选框…如果我使用搜索过滤器过滤列表,它也将选中该列表中的所有复选框

现在我只想检查列表中的筛选项是否应该被选中,如果我单击checkall。。。。 如果我不筛选,则表示它将检查列表中的所有项目

我的密码在下面

检查所有编码:

<script>
function checkall(formname,checkname,thestate)
     {
            var el_collection=eval("document.forms."+formname+"."+checkname);
            for (c=0;c<el_collection.length;c++)
                el_collection[c].checked=thestate
     }
</script>
    <script>
    (function ($) {
      jQuery.expr[':'].Contains = function(a,i,m){
          return (a.textContent || a.innerText || "").toUpperCase().indexOf(m[3].toUpperCase())>=0;
      };

      function listFilter(header, list) {
        var form = $("<form>").attr({"class":"filterform","action":"#"}),
            input = $("<input>").attr({"class":"filterinput","type":"text"});
        $(form).append(input).appendTo(header);

        $(input)
          .change( function () {
            var filter = $(this).val();
            if(filter) {

              $(list).find("a:not(:Contains(" + filter + "))").parent().slideUp();
              $(list).find("a:Contains(" + filter + ")").parent().slideDown();
            } else {

              $(list).find("li").slideDown();
            }
            return false;
          })
        .keyup( function () {
            $(this).change();
        });
      }

      $(function () {
        listFilter($("#header"), $("#list"));
        listFilter($("#header1"), $("#list1"));
      });
    }(jQuery));
</script> 


<script type="text/javascript">
function show()
{

 if (window.XMLHttpRequest)
    {
        xmlhttp=new XMLHttpRequest();
    }
    else
    {
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }
    xmlhttp.open("GET","location.xml",false);
    xmlhttp.send();
    xmlDoc=xmlhttp.responseXML;
    var x=xmlDoc.getElementsByTagName("value");

    for (i=0;i<x.length;i++)
    {
     var name=x[i].getElementsByTagName("name")[0].childNodes[0].nodeValue;
     var link = document.createElement( "a" );
     var list = document.createElement( "li" );
     var cb = document.createElement( "input" );
     cb.type = "checkbox";
     cb.id = "c1";
     cb.value = name;
     cb.name="v1";
     cb.checked = false;

     link.appendChild(cb);
     link.innerHTML+=name;

     var lists=document.getElementById('list');
     list.appendChild(link);
     lists.appendChild(list);

     }
}
</script>
<form id="tracklocation">
    <ul id="list" style="list-style:none">
    </ul>

     <h1 id="header1">DVD Collection</h1>

    <input type="radio" value="ca" name="dt" onclick="checkall('tracklocation','v1',true)">Check All&nbsp;&nbsp;<input type="radio" value="ua" name="dt" onclick="checkall('tracklocation','v1',false)">Uncheck All
  </form>

函数checkall(formname、checkname、State)
{
var el_collection=eval(“document.forms.+formname+”+checkname);
对于(c=0;c=0;
};
函数listFilter(标题、列表){
var form=$(“”).attr({“类”:“过滤性能”,“操作”:“#”}),
输入=$(“”).attr({“类”:“过滤器输入”,“类型”:“文本”});
$(表单).append(输入).appendTo(标题);
$(输入)
.改变(功能){
var filter=$(this.val();
如果(过滤器){
$(列表).find(“a:not(:Contains(“+filter+”))).parent().slideUp();
$(列表).find(“a:包含(“+filter+”)).parent().slideDown();
}否则{
$(list.find(“li”).slideDown();
}
返回false;
})
.keyup(函数(){
$(this.change();
});
}
$(函数(){
listFilter($(“#标题”)、$(“#列表”);
列表过滤器($(“#标题1”),$(“#列表1”);
});
}(jQuery));
函数show()
{
if(window.XMLHttpRequest)
{
xmlhttp=新的XMLHttpRequest();
}
其他的
{
xmlhttp=新的ActiveXObject(“Microsoft.xmlhttp”);
}
open(“GET”,“location.xml”,false);
xmlhttp.send();
xmlDoc=xmlhttp.responseXML;
var x=xmlDoc.getElementsByTagName(“值”);

对于(i=0;i这并不能回答您的问题,但它的格式要比注释好得多

请不要使用eval,方括号表示法是更好的选择。如果您有:

> var el_collection=eval("document.forms."+formname+"."+checkname);
假定checkname是单选按钮集的名称,则应为:

var el_collection = document.forms[formname][checkname];

还要注意,如果只有一个这样的输入,
el_collection
将是对该元素的引用,而不是一个HTMLCollection,因此您应该检查它。

使用Jquery像这样更改checkall函数……它可以正常工作

function checkall(formname,checkname,thestate)
{
    if ($('li').is(':hidden')) {
        var visible = $('input[type=checkbox]:visible').each(function() { 
                         this.checked = thestate; }
                       );
    }
    else
    {
        var visible = $('input[type=checkbox]').each(function() { 
                         this.checked = thestate; }
                       );
    }
}