<form name="form1" method="post" action="">
<input type="text" name="name">
</form>
<script language="JavaScript" type="text/JavaScript">
alert($("form[name=form1]").length);
//得到0
</script><form name="form1" method="post" action="">
<input type="text" name="name1">
</form>
<script language="JavaScript" type="text/JavaScript">
alert($("form[name=form1]").length);
//得到1
</script>请教解决办法?请不要回答别使用name="name"的input框,谢谢。

解决方案 »

  1.   

    <input type="text" name="name1"/>
      

  2.   

    先占个楼, firefox下第一种也没有问题
      

  3.   

    以下代码, jquery.1.4.2中, 大概在3520行左右
    其中的Sizzle闭包中return makeArray( context.querySelectorAll(query), extra );这行代码没有检测是否支持querySelectorAll这个方法.....
    但是外层document.querySelectorAll做了检测, 所以有些迷惑....
    刚测试, 出问题的浏览器下, 直接alert(document.querySelectorAll)是undefined期待高人解答
    if ( document.querySelectorAll ) {
    (function(){
    var oldSizzle = Sizzle, div = document.createElement("div");
    div.innerHTML = "<p class='TEST'></p>"; // Safari can't handle uppercase or unicode characters when
    // in quirks mode.
    if ( div.querySelectorAll && div.querySelectorAll(".TEST").length === 0 ) {
    return;
    }

    Sizzle = function(query, context, extra, seed){
    context = context || document; // Only use querySelectorAll on non-XML documents
    // (ID selectors don't work in non-HTML documents)
    if ( !seed && context.nodeType === 9 && !isXML(context) ) {
    try {
    return makeArray( context.querySelectorAll(query), extra );
    } catch(e){}
    }

    return oldSizzle(query, context, extra, seed);
    }; for ( var prop in oldSizzle ) {
    Sizzle[ prop ] = oldSizzle[ prop ];
    } div = null; // release memory in IE
    })();
    }
      

  4.   


    貌似你写法不对吧。
    alert($("form[name=form1]").length);
    应该是:alert($("form[name='form1']").length);
    jQuery选择器中要加上‘’--$("form[name='form1']")
    不是bug!!
      

  5.   

     jquery.1.2.3下,IE8,Mozilla Firefox ,谷歌 都有以上的问题.应该是jquery的 BUG
      

  6.   

    在jquery1.3.2中没有此bug,大家就尽量用最新的版本吧
    jquery是js的封装,看看jquery的bug存在不存在可以用js来实现测试
    js测试一下就可以了alert(document.getElementsByTagName("form").length)
      

  7.   

    jquery1.3.2和jquery1.4.2都有同样问题。经过研究过jquery的代码,此bug存在,但不是jquery的原因,而是ie6的bug。目前正在寻找解决方案。
      

  8.   

    本帖最后由 zswang 于 2010-06-09 15:17:44 编辑
      

  9.   

    IE6固然有问题但试问JQ在处理这个的时候是不是也有问题呢?
    //代码来自JQ1.3.2
    find:{
    ...,

    NAME:function(V,Y,Z){
    if(typeof Y.getElementsByName!=="undefined"){
    var U=[],X=Y.getElementsByName(V[1]);//通过name属性获取
    for(var W=0,T=X.length;W<T;W++){
    if(X[W].getAttribute("name")===V[1]){//判断name属性是否等于V[1],这不是多次一举嘛,个人感觉可以将这个判断注释掉
    U.push(X[W]);
    }

    }
    return U.length===0?null:U
    }
    },
            ....
    }注释后的执行效果:
    <form name="form1" method="post" action="">
    <input type="text" name="name" />
    </form>
    <script language="JavaScript" type="text/JavaScript">
    alert($("form[name=form1]").length);//1
    alert($("form[name=form1]")[0].method);//post
    </script>
      

  10.   

    <form name="form1" method="post" action="">
    <input type="text" name="name" />
    </form>
    <script language="JavaScript" type="text/JavaScript">
    alert($("form[name=form1]").length);//1
    alert($("form[name=form1]")[0].method);//post
    alert($("form[name=form1]")[0].name);//当然了,这个还是object,在使用的时候还是尽量避免使name属性为"name"
    </script>
      

  11.   

    呵呵。jq为什么这样处理,还是因为ie的bug造成的。因为ie里用getElementsByName会把id相同的元素一起读出来,所以jq不得不再判断一次以确保不出错。