7

入力に何かを入力してボタンをクリックした後、「.val()」は空の値を返します。

HTML コード:

<div class="mainClass">
    <div class="class1" >
       <div class="class2">
         <h3>Settings 1</h3>   
        <label>
           <span>Text 1:</span>
           <input type="text" name="text">
        </label>
        <label>
           <span>Text 2:</span>
           <input type="text" name="text2">
        </label>
       </div>
    </div>

    <div class="class3" >
       <div class="class4">
         <h3>Settings 2</h3>   
        <label>
           <span>Text 1:</span>
           <input type="text" name="text">
        </label>
        <label>
           <span>Text 2:</span>
           <input type="text" name="text2">
        </label>
       </div>
    </div>
</div>
 <button id="Go" class="go" >GO </button>

ジャバスクリプトコード:

$('#Go').on('click', function() {
    alert($('.class1 input').val());    //return an empty value 
    $('.class1 input').val("test");
    alert($('.class1 input').val());    //return test
});

編集:

これでも機能しません。ここでは入力が 1 つしかないため、間違ったものを入力することはできません。

<div class="mainClass">
    <div class="class1" >
       <div class="class2">
         <h3>Settings 1</h3>   
        <label>
           <span>Text 1:</span>
           <input type="text" name="text">
        </label>        
       </div>
    </div>
</div>
 <button id="Go" class="go" >GO </button>

編集2:問題の始まりを見つけました...

私がそれをしているとき:

$('.class1 input').each(function () {
    alert($(this).attr('name') + "  value:" +$(this).val() );
});

次のような 2 つの「アラート」が表示されます。

text   value:
text   value:myinputText    

私のHTMLで1つに対して2つ作成されたので、最初のものは空で、2つ目はうまく機能します! 私のページをよく見ると、すべての要素が重複していることがわかりました( <select,field, input...)

どのようにそれが可能ですか?HTMLファイルを2回呼び出していますか? そして、私のコードはすべてポップアップにあります(それが役立つかどうかはわかりません)(私はJavascriptとjQueryが初めてです)

ありがとう

4

5 に答える 5

11

一致する要素が複数あり'.class1 input'ます。おそらく、セットの最初の 1 つを埋めていません。

ドキュメントから:

一致した要素のセットの最初の要素の現在の値を取得します。

Whileval('text')は、一致するすべての要素を埋めます:

一致した要素のセット内の各要素の値を設定します

これが、2 番目のアラートに何かが表示される理由です。

より選択的なセレクターを使用することをお勧めします。通常、値をサーバーに送信するためにフォームを使用する場合は、ID または名前を使用します。

于 2013-06-18T13:39:14.067 に答える
3
$('.class1 input').val() 

2つの要素を指します

<input type="text" name="text">

<input type="text" name="text2">
于 2013-06-18T13:39:42.567 に答える
1

一致する要素が複数あります。

jQueryのドキュメントから

.val()

一致した要素のセットの最初の要素の現在の値を取得するか、一致したすべての要素の値を設定します。

ドキュメントの状態として、一致したセットの最初の要素のみを取得しています。すべての値が必要な場合は、セットをループする必要があります。

于 2013-06-18T13:39:39.647 に答える