JQuery适用于Firefox,但不适用于IE

时间:2009-06-01 03:05:04

标签: javascript jquery

任何人都知道为什么以下JQuery表达式在Firefox中有效但在IE或Chrome中无效?

$('form :hidden:last').attr('name')

警告声明显示在IE中表达式未定义。

更新:这是一些失败的HTML。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
   <head>
      <script type="text/javascript" src="/js/jquery-1.3.2.min.js">
      </script>
      <script type="text/javascript">
         function addItem() {
           var v = $('form :hidden:last').attr('name');
           var n = /(.*)input/.exec(v);
           var newPrefix;
           if ( n[1].length == 0 ) {
             newPrefix = '1';
           } else {
             newPrefix = parseInt(n[1])+1;
           }
           var lastExercise = $('form tr:last select:first').attr('value');
           var oldElem = $('form tr:last');
           var newElem = oldElem.clone(true);
           var lastHidden = $('form :hidden:last');
           lastHidden.val(newPrefix);
           var pat = '=\"'+n[1]+'input';
           newElem.html(newElem.html().replace(new RegExp(pat, 'g'), '=\"'+newPrefix+'input'));
           newElem.appendTo('table');
           $('form tr:last select:first').attr('value', lastExercise);
           $('form :hidden:last').val('');
         }
         function removeItem() {
           var rows = $('form tr');
           if ( rows.length > 2 ) {
             rows.filter(":last").remove();
             $('form :hidden:last').val('');
           } else {
             alert('Cannot remove any more rows');
           }
         }
      </script>
   </head>
   <body>
         <form autocomplete="off" method="post" action="">
            <div>
               <input type="button" onclick="addItem(); return false;" value="Add Item" />
               <input type="button" onclick="removeItem(); return false;" value="Remove Last Item" />
            </div>
            <table>
               <tr>
                  <th>Name</th>
                  <th>Weight</th>
               </tr>
               <tr>
                  <td>
                     <input type="text" name="input1" id="input1" value="" />
                  </td>
                  <td>
                     <input type="text" name="input2" id="input2" value="" />
                     <select name="input3" class="unitsInput">
                        <option value="0">
                           Pounds
                        </option>
                        <option value="1">
                           Kilograms
                        </option>
                     </select>
                  </td>
                  <td>
                     <input type="hidden" name="input4" id="input4" value="" />
                  </td>
               </tr>
            </table>
            <div>
               <select name="input8">
                  <option value="0">0</option>
                  <option value="1">1</option>
                  <option value="2">2</option>
               </select>
            </div>
            <div>
               <input type="submit" name="submit" id="submit" value="Submit" />
            </div>
         </form>
   </body>
</html>

4 个答案:

答案 0 :(得分:2)

你的JQuery是否包含在$(document).ready( ... )

例如:

$(document).ready(function() {
    $('form :hidden:last').attr('name')
});

必须这样做以确保在JQuery代码开始执行之前DOM已完全加载。否则,没有DOM(文档)可供查询。

答案 1 :(得分:1)

在DOM完全加载并使用最新版本的jQuery之后,您是否运行此查询? Dan的上述例子对我来说在IE6中工作正常。

答案 2 :(得分:0)

我能够让它在IE7中正常运行。
你的HTML是什么样的?

以下是我的看法:

<!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 http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Untitled Document</title>
<script type="text/javascript" src="jquery-1.3.2.min.js"></script>
</head>

<body>
<form action="" method="get" name="testform">
<input name="bob" type="hidden" value="" />
<input name="steve" type="hidden" value="" />
<input name="william" type="hidden" value="" /></form>
<script type="text/javascript">
    $(document).ready(function(){
        alert($('form :hidden:last').attr('name'));
    });
</script>
</body>
</html>

答案 3 :(得分:0)

IE似乎将最后的选项元素视为隐藏。将javascript中的所有“...:hidden ...”选择器更改为“... input:hidden ...”似乎可以解决问题。