既不是触发也不是触发

时间:2012-07-19 06:11:28

标签: javascript jquery

以下是我的发言:

$(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语句的任何部分都没有运行,至少有一部分应该是

5 个答案:

答案 0 :(得分:9)

setAttribute是一个dom元素节点方法,使用.attr()来表示jQuery方法

$(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');
        }
    });
});

由于setAttribute不是jQuery对象的方法,因此会产生错误并且代码会停止执行,因此它永远不会到达警报。

答案 1 :(得分: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');
        }
    });
});​

答案 2 :(得分:1)

尝试关注获取提醒: 在你的情况下,javascript执行在进入if或else后停止,然后在它到达alert语句之前抛出错误,检查类似情况你可以逐行向下移动alert语句。 要获得更好的解决方案,请使用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");

        }
    });
});

更改为jQuery attr()而不是setAttribute,因为$('#something')是jQuery对象而不是DOM节点,以修复错误。

最终代码:

$(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");

        }
    });
});

答案 3 :(得分:0)

更改此处的行

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

if($(this).find('option:selected').val() == "wiki") {

答案 4 :(得分:0)

尝试:

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