2010-11-22 31 views
5

İstemciden bir sayfayı düzeltmek için bir görevim var ve jQuery soyundan gelen seçicinin beklendiği gibi davranmadığını buldum.Bu jquery seçici neden çalışmıyor?

console.debug($("#mssysform8217 :input[name='email']").val()); 

[email protected]

:

<form action="http://submit.url/subscribe.php" method="post" enctype="multipart/form-data" id="mssysform8217" class="mssysform" > 
<div id="mssys-formcontainer"> 
    <div class="formfields"> 
     <table style="width: 100%"> 
     <div class="formfield-item" id="formfield-item-email"> 
      <tr> 
      <td class="style1"><label >E-mail címe</label></td> 
      <td> 
       <input type="text" name="email" value=""> 
       <div class="error-container">Please fill in this field!</div> 
       <div style="clear: both;"></div> 
      </td> 
      </tr> 
     </div> 
     </table> 
    </div> 
</div> 
</form> 

Ben FireFox ile hata ayıklamak için çalıştı:

  • bu çalıştı İşte

    HTML bir excrept olduğunu
  • bu çalıştı olmadı:

    console.debug($("#mssysform8217 #formfield-item-email :input[name='email']").val()); 
    

    tanımsız

  • ama:

    console.debug($("#mssysform8217 #formfield-item-email")); 
    

    [div # FormField maddelik-email.formfield-öğeyi]

sorun Gönderme komut dosyası bir üçüncü taraf uygulaması tarafından oluşturulduğu ve 3 seviyeli alt öğe seçicisini kullanmak istemesidir.

+0

Neden çoklu Kimlik Seçicileri ("#id") kullanıyorsunuz? – Homer

+0

Ve sadece # formfield-item-email den azalan bir '' var gibi görünüyor, böylece [name] öznitelik seçici gereksiz olurdu. '$ ('# formfield-item-email input'). val()' ihtiyacınız olan her şey olmalıdır. – stevelove

cevap

16

Kullanmaya çalıştığınız jQuery seçici, HTML geçersiz olduğundan çalışmayacaktır.

<table style="width: 100%"> 
     <div class="formfield-item" id="formfield-item-email"> 
      <tr> 

Bu geçerli bir HTML değildir. Bir hücrenin dışındaki bir tablonun ortasına bir div (veya <thead>, <tfoot>, <tbody>, <tr>'dan başka herhangi bir öğe) yerleştirmek geçerli değildir.

<div> 
    <table> 
    <tr><td></td></tr> 
    </table> 
</div> 

Ya da bu geçerlidir:

Bu geçerli bir yan not

<table> 
    <tr><td><div></div></td></tr> 
</table> 

: Sen formunu biçimlendirmek için tablo kullanıyorsanız . Tablolar, tablo verileri içindir. Kitabımda düzen için tablo kullanmak kötü bir fikirdir. HTML öğeleri için uygun semantik kullanın (tablolar = tablo verileri, li = listeler, div = sayfa bölümleri, vb ...).

+1

* "Bir tablonun ortasına div (veya herhangi bir eleman) yerleştirmek geçerli değildir ..." * İstisnalar ve 'dur. – user113716

+0

@ patrick dw sağın ... Üzgünüm cevabı düzeltirim. –

+0

, doğrudan bir masaya konamaz. Bu bir başlık * hücre * ve her zaman bir tr içinde olmalıdır. +1 yine de. – GolezTrol