4

これが私の声明です:

$(document).ready(function() {
    $('#search_option').change(function() {
        alert('changed');
        if( $('#search_option').val() == "wiki" ) {
            $('#search_form').setAttribute('action', "http://www.wikipedia.org/search-redirect.php");
            $('#search_bar').setAttribute('name', "search");
            alert('Got inside wiki');
        } else {
            $('#search_form').setAttribute('action', "http://www.google.com/search");
            $('#search_bar').setAttribute('name', "q");
            alert('Got inside google');
        }
    });
});

どちらの「内部侵入」アラートもトリガーされていません。つまり、どちらも実行されていません。正しいですか? if ステートメントのどちらの部分も実行されていない理由がわかりません。少なくとも 1 つは実行する必要があります。

4

5 に答える 5

9

setAttribute.attr()jQuery メソッドを使用する dom 要素ノード メソッドです。

$(document).ready(function() {
    $('#search_option').change(function() {
        alert('changed');
        if( $('#search_option').val() == "wiki" ) {
            $('#search_form').attr('action', "http://www.wikipedia.org/search-redirect.php");
            $('#search_bar').attr('name', "search");
            alert('Got inside wiki');
        } else {
            $('#search_form').attr('action', "http://www.google.com/search");
            $('#search_bar').attr('name', "q");
            alert('Got inside google');
        }
    });
});

jQuery オブジェクトのメソッドではないためsetAttribute、エラーが発生し、コードが実行を停止するため、アラートに到達しません。

于 2012-07-19T06:15:18.247 に答える
3

.setAttribute()は有効な jQuery メソッドではありません。を使用し.attr()ます。

$(document).ready(function() {
    $('#search_option').change(function() {
        alert('changed');
        if( $('#search_option').val() == "wiki" ) {
            $('#search_form').attr('action', "http://www.wikipedia.org/search-redirect.php");
            $('#search_bar').attr('name', "search");
            alert('Got inside wiki');
        } else {
            $('#search_form').attr('action', "http://www.google.com/search");
            $('#search_bar').attr('name', "q");
            alert('Got inside google');
        }
    });
});​
于 2012-07-19T06:15:35.067 に答える
1

アラートを取得するには、以下を試してください: あなたのケースでは、javascript の実行が if または else に入った後に停止し、アラート ステートメントに到達する前にエラーをスローします。同様のケースでチェックするには、アラート ステートメントを 1 行ずつ下に移動できます。より良い解決策として、firebug または他の devTools でブレークポイントを確認してください

$(document).ready(function() {
    $('#search_option').change(function() {
        alert('changed');
        if( $('#search_option').val() == "wiki" ) {
            alert('Got inside wiki');
            $('#search_form').setAttribute('action', "http://www.wikipedia.org/search-redirect.php");
            $('#search_bar').setAttribute('name', "search");

        } else {
            alert('Got inside google');
            $('#search_form').setAttribute('action', "http://www.google.com/search");
            $('#search_bar').setAttribute('name', "q");

        }
    });
});

エラーを修正するには、DOM ノードではなく jQuery オブジェクトではなくattr()、jQuery に変更します。setAttribute$('#something')

最終的なコード:

$(document).ready(function() {
    $('#search_option').change(function() {
        alert('changed');
        if( $('#search_option').val() == "wiki" ) {
            alert('Got inside wiki');
            $('#search_form').attr('action', "http://www.wikipedia.org/search-redirect.php");
            $('#search_bar').attr('name', "search");

        } else {
            alert('Got inside google');
            $('#search_form').attr('action', "http://www.google.com/search");
            $('#search_bar').attr('name', "q");

        }
    });
});
于 2012-07-19T06:15:53.583 に答える
0

ここで行を変更します

if( $('#search_option').val() == "wiki" ) { 

if($(this).find('option:selected').val() == "wiki") {
于 2012-07-19T06:14:08.660 に答える
0

試す:

if($('#search_option option:selected').val()=="wiki"){
于 2012-07-19T06:17:03.837 に答える