2010-11-17 12 views
1

Ich habe ein seltsames Problem mit dem Zählen von Formelementen in jQuery. Während ich es umgehen kann, habe ich mich gefragt, ob jemand weiß, warum gibt es einen Unterschied zwischen Browsern mit dem folgenden Beispiel?jQuery Form Eingabe Anzahl anders in IE

<!DOCTYPE html 
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> 
<head> 
    <title>IE Test</title> 
    <meta name="description" content="" /> 
    <meta name="keywords" content="" /> 
    <meta name="author" content="" /> 
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> 
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js" type="text/javascript"></script> 

    <script type="text/javascript"> 
     $(document).ready(function(){ 
      alert($('form :input').length); 
     }); 
    </script> 
</head> 
<body>  
    <div id='wrapper'> 
     <div id='header'> 
      <form action='#' method='POST'> 
       <input type='text' name='title' value='Hotdog Fanatic'></input> 
      </form> 
     </div> 
    </div> 

</body> 

IE 6/7/8 gib mir alle ein Ergebnis von 2, während FF, Chrom, Opera und Safari alle Zählung 1 abgestimmt Element.

Wenn ich den Selektor nach einem beliebigen Attribut zu filtern, scheint die Anzahl richtig. Beispiel: form :input[name] oder form :input[type] als Selektor gibt nur ein angepasstes Element in IE zurück.

Weiß jemand, warum das sein könnte?

Danke!

Baps.

Antwort

6

Entfernen Sie die Endmarke </input>.
Stattdessen sollten Sie einen selbstschließenden Tag machen:

<input type='text' name='title' value='Hotdog Fanatic' /> 

Ihr Skript ändern zu

<script type="text/javascript"> 
    $(document).ready(function(){ 
     alert($('form :input')[1].outerHTML); 
    }); 
</script> 

Diese </INPUT> alarmiert.

+0

Wahr. Das Schließen von Eingabe-Tags wird nicht mit W3C validiert. –

+0

Sehr gut, das war mir nicht aufgefallen. Vielen Dank! – Baps

+0

Gern geschehen. – SLaks

1

Eingabeelemente sind nicht Container, wenn XHTML strict verwenden, wie Sie sind, ersetzen Sie es mit diesem:

<input type='text' name='title' value='Hotdog Fanatic' />