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

4

5 回答 5

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 对象的方法,因此会产生错误并且代码停止执行,因此它永远不会到达警报。

于 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 后停止,然后在到达警报语句之前抛出错误,以检查类似情况,您可以逐行向下移动警报语句。使用 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()不是jQuery 对象而不是 DOM 节点,以修复错误。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 回答