2010-11-22 29 views
5

クライアントからページを修正するタスクがあり、jQueryの子孫セレクタが期待通りに動作しないことがわかりました。なぜこのjqueryセレクタが機能しないのですか?

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> 

私はFirefoxでそれをデバッグしようとした:

  • これは働いていた。ここ

    は、HTMLのexcreptです
  • これは働いていませんでした:

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

    未定義

  • しかし:

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

    [DIV#フォームフィールド項目-email.formfield項目]

を問題送信スクリプトがサードパーティーのアプリケーションによって生成され、3レベルの子孫セレクターを使用したいということです。

+0

なぜ複数のIDセレクタ(「#id」)を使用していますか? – Homer

+0

そして、#formfield-item-emailから降順である「」が1つしかないようですので、[name]属性セレクタは不要です。 '$( '#formfield-item-email input')。val()'は必要なものだけでなければなりません。 – stevelove

答えて

16

HTMLが無効であるため、使用しようとしているjQueryセレクタが機能しません。

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

これは有効なHTMLではありません。 divの部分(または<thead><tfoot><tbody><tr>以外の要素)をセルの外側の表の中央に配置することは無効です。

これが有効である:

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

それともこれが有効である:サイドノートで

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

あなたのフォームをフォーマットするためにテーブルを使用しています。表は表形式のデータを意味します。私の本ではレイアウト用のテーブルを使うのは悪い考えです。 HTML要素(表=表データ、li =リスト、div =ページ区画など)に適切なセマンティクスを使用します。

+1

* "divの要素(または要素)をテーブルの真ん中に置くことはできません..." *例外は「」と「」です。 – user113716

+0

@patrick dwあなたの権利...申し訳ありません私は答えを修正します。 –

+0

thは直接テーブルに置くことはできません。それはヘッダ* cell *であり、常にtrの内部にあるべきです。それにもかかわらず+1。 – GolezTrol

関連する問題