1

jQuery 1.7.2を使用して、4つの送信ボタンのどれが押されたかを確認しようとしています。3つのうちのいずれかがクリックされた場合、ボタンの値を示すアラートボックスを表示したいと思います。これがhtmlコードです:

<body>
    <table>
        <tr>
            <td>
                <input type="submit" id="cancel" value="Cancel">
            </td>
        </tr>

        <tr>
            <td>
                <input type="submit" id="find" value="Find">
            </td>
        </tr>

        <tr>
            <td>
                <input type="submit" id="save" value="Save">
            </td>
        </tr>

        <tr>
            <td>
                <input type="submit" id="update" value="Update">
            </td>
        </tr>
    </table>
</body>

jQueryの関数コードは次のとおりです。

<script>
        $(function(){
            $(':submit').click(function(){
                var value = $(this).val();
                //alert(value);

                if($(this).val() == "Save" || "Find" || "Clear") {
                //if($(this).val() == "Update") {
                    alert('The value is: ' + value);
                }
            });
        });
    </script>

3つのボタンのいずれかをクリックすると値が表示されますが、[更新]ボタンをクリックすると値も表示されます。私のifブロックはそれが起こらないようにするだろうと思いましたか?

その行をコメントアウトして、代わりにこのコードを使用する場合:

if($(this).val() == "Update") {
                        alert('The value is: ' + value);
                    }

次に、[更新]ボタンをクリックしたときにのみ、アラートが発生します。複数の送信ボタンをチェックしているときのここのコードの何が問題になっていますか?

4

1 に答える 1

4

ifステートメントが正しくありません:

if( $(this).val() == "Save" || "Find" || "Clear" )

オペレーターは一般的にこのように動作すると想定されていますが、これは動作方法ではありません。値がこれらの文字列の1つと等しいかどうかをテストする場合は、$.inArray代わりに次を使用する必要があります。

if ( $.inArray( $(this).val(), [ "Save", "Find", "Clear" ] ) > -1 );

追加クレジット

少し余分なクレジットとして、||演算子は2つの式(1つはその左側、もう1つは右側)を評価しtrue、2つの式のいずれかがであるかどうかを評価します。

if ( true || false ) // Evalutes to true, since one of the two was true

あなたの試みでは、値がこれらの文字列のいずれかに等しいかどうかを確認したいと思いました。を使用する場合は||、いくつかの比較を作成する必要があります。

var myVal = $(this).val();
if ( ( myVal == "Save" ) || ( myVal == "Find" ) || ( myVal == "Clear" ) )

この条件はtrue、いずれかの条件が満たされているかどうかを評価します。これがすぐにかなり冗長になることがわかります。

于 2012-05-27T05:02:23.417 に答える