2009-06-01 18 views
1

Wer weiß, warum der folgende JQuery-Ausdruck in Firefox funktioniert, aber nicht in IE oder Chrome?JQuery funktioniert in Firefox, aber nicht in IE

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

Eine Alert-Anweisung zeigt, dass im IE der Ausdruck nicht definiert ist.

UPDATE: Hier ist einige HTML, die fehlschlägt.

<!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

Liefern Sie HTML und Sie erhalten diese beantwortet lickety-Split. –

+0

In dem Code, den ich hinzufügte, gibt die erste Zeile in AddItem undefined zurück. – Khanpo

Antwort

0

Ich konnte es in IE7 gut laufen lassen.
Wie sieht Ihr HTML aus?

Hier ist, was ich wie folgt aussieht:

<!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

Mein HTML ist komplex. Ich habe auch IE6 benutzt. Ich werde versuchen, ein einfaches Beispiel HTML zu finden, das fehlschlägt. – Khanpo

1

Haben Sie diese Abfrage nach DOM ausgeführt wird vollständig geladen und mit der neuesten Version von jQuery? Das obige Beispiel von Dan funktioniert sogar in IE6 für mich.

2

Ist Ihr JQuery in der a $(document).ready(...) verpackt?

Zum Beispiel:

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

Es ist wichtig, dies zu tun, um sicherzustellen, dass der DOM vollständig geladen ist, bevor Sie Ihr JQuery-Code ausgeführt wird gestartet. Andernfalls gibt es kein DOM (Dokument) für die Abfrage.

0

Es scheint, dass IE die Optionselemente am Ende als versteckt behandelt. Das Ändern aller "...: hidden ..." Selektoren im Javascript zu "... input: hidden ..." scheint das Problem zu lösen.

Verwandte Themen