2009-06-01 10 views
1

다음 JQuery 표현식이 Firefox에서는 작동하지만 IE 또는 Chrome에서는 작동하지 않는 이유를 알고 계십니까?JQuery는 Firefox에서 작동하지만 IE에서는 작동하지 않습니다

$('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> 
+3

일부 HTML을 제공하면 답글 개똥 벌레가 나옵니다. –

+0

내가 추가 한 코드에서 addItem의 첫 번째 행은 undefined를 반환합니다. – Khanpo

답변

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> 
+0

내 HTML이 복잡합니다. 나는 또한 IE6을 사용하고 있었다. 나는 실패한 간단한 예제 HTML을 찾으려고 노력할 것이다. – Khanpo

1

당신이 DOM 후이 쿼리를 실행 함을로드 및 jQuery를 최신 버전을 사용 : 여기

내 모습 무엇인가? Dan의 위 예제는 IE6에서도 잘 작동합니다.

2

귀하의 JQuery가 $(document).ready(...)에 싸여 있습니까? 예를 들어

:

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

당신의 JQuery와 코드가 실행을 시작하기 전에 DOM이 완전히로드되었는지 확인하기 위해이 작업을 수행하는 것이 필수적이다. 그렇지 않으면 쿼리 할 DOM (문서)이 없습니다.

0

IE는 끝에있는 옵션 요소를 숨김으로 처리합니다. javascript에서 "... : hidden ..."셀렉터를 변경하면 문제를 해결하는 것 같습니다.

관련 문제