【问题标题】:jQuery .click() perform the default action before the custom functionjQuery .click() 在自定义函数之前执行默认动作
【发布时间】:2012-06-26 10:06:47
【问题描述】:

这是我的代码,我有两个复选框,并希望保持一个禁用状态,直到另一个启用:

$(function(){
    $('#remember').live('click', function(event){
        if($('#remember').is(':checked')){
            $('#keepIn').removeAttr('disabled');
        }
        else
            $('#keepIn').attr('disabled', 'disabled');
    });
});

问题是这个函数在默认操作之前执行,当我点击第一个$('#remember').is(':checked')返回false(旧值)而不是true。

【问题讨论】:

    标签: javascript jquery


    【解决方案1】:

    您可以改用change 事件:

    $('#remember').live('change', function(event) {
        if (this.checked) {
            $('#keepIn').removeAttr('disabled');
        } else {
            $('#keepIn').attr('disabled', 'disabled');
        }
    });
    

    演示: http://jsfiddle.net/jP3NY/


    注意: live 方法已弃用。您最好使用ondelegate

    对于较新版本的 jQuery,解决方案可能如下:

    $('body').on('change', '#remember', function(event) {
        $('#keepIn').prop('disabled', !this.checked);
    });
    

    您可以使用#remember 的任何父元素来代替body

    【讨论】:

    • 只需 2 美分 bruv 请使用 .on 而不是 .live :)
    • 谢谢,解决了,我会尽可能接受答案。 @Tats_innit 在 live vs on issue 上,我试过了,但 .on 方法对我不起作用,请参阅这个问题:stackoverflow.com/questions/11191966/…
    • @Tats_innit 我们不知道使用的是什么版本的 jQuery ;)
    • @VisioN 确实很重要,但我强烈建议任何人获取最新版本 :) 否则人们会错过很多精彩 :)
    • @Tats_innit 我忘了,我用的是 1.7.2
    猜你喜欢
    • 2015-12-06
    • 1970-01-01
    • 2022-06-11
    • 1970-01-01
    • 2011-08-14
    • 1970-01-01
    • 1970-01-01
    • 2016-12-19
    • 1970-01-01
    相关资源
    最近更新 更多