jQuery - if else点击事件

时间:2012-03-06 17:32:37

标签: jquery

我对jQuery很新,现在只是玩游戏。我正在尝试创建一个点击事件,只要点击它就必须将<select></select>的属性“禁用”为真/假。

所以它从禁用[true]开始,当点击链接时它将被禁用[false] - 很酷。但是现在我不想用相同的链接将它设置为禁用[true]。

我的代码如下:

$('.enableSelects').click(function(){
    if($('select').is(':hidden')){
        $('select').attr('disabled', true);
    } else {
        $('select').attr('disabled', false);
    }
});

3 个答案:

答案 0 :(得分:3)

关于简短版本:

$('.enableSelects').click(function(){
    $('select').prop('disabled', !$('select').prop('disabled'));
});​

从:

开始
$('select').prop('disabled', !$('select').prop('disabled'));
//          |                ||__________________________|
//          |                |  |
//          |                |  |_1) this will be evaluated first, resulting
//          |                |       in either 'true' or 'false'
//          |                |
//          |                |____2) the boolean value from above will then
//          |                        be inverted, and this new value will be
//          |                        used as the new value for disabled,
//          |                        which is then assigned
//          |
//          |_____________________3) using the 'prop' method

稍微好一点的版本:

$('.enableSelects').click(function(){

    //                            |-- 1) this function gets called by jQuery
    //                            |      automatically. The index and the current
    //                            |      value will be passed to it.
    //                            |      The return value will be assigned to the
    //                            |      property.
    //                            |
    $('select').prop('disabled', function (idx, current) {

       // we're returning the inverted current value
       return !current;

    });
});​

它与上面基本相同,但我们正在减少必须评估的选择器数量。

http://jsfiddle.net/k3sb8/1/

答案 1 :(得分:1)

使用:disabled代替:hidden,更喜欢.prop()而不是.attr()

此外,当文档中只有一个<select>时,您当前的方法可以正常工作。当您有多个<select>元素时,请更改选择器。

答案 2 :(得分:0)

您可能需要阅读.prop() vs .attr()

尝试使用prop()代替attr()

尝试在评论中使用@Yoshi的小提琴:http://jsfiddle.net/k3sb8/