removeClass在函数内部不起作用

时间:2013-07-15 21:49:30

标签: jquery

我有.on('click', function())正在调用另一个函数

$('.controls a[data-attr="editEmailAddress"]').on('click', function (e) {
    e.preventDefault();
    if ($(this).hasClass("btn-primary")) {
        updateEmailAddress();
    } else {
        hideSuccess();
    }
    $(this).addClass("btn-primary");
    $(this).find('i').addClass("icon-white icon-edit").addClass('icon-ok');
    $(this).siblings('input[type=text]').attr('disabled', false);
});

该函数执行一些标准验证,如果它是有效的,它应该删除其他一些类中的类btn-primary

function updateEmailAddress() {
    // Clear the error div of any previous errors
    $('#validationSummary').hide().empty();

    var isValid = true;

    // Must Enter Email Address
    var emailEntered = $('#txtEmailAddress').val();
    if (!$.trim(emailEntered).length) {
        $('#validationSummary').append('Email address required').fadeIn();
        isValid = false;
    }
    else {
        // If Email Entered verify that it is a valid email address
        if (!validateEmail(emailEntered)) {
            $('#validationSummary').append('Enter valid email address.').fadeIn();
            isValid = false;
        }
    }
    if (isValid) {
        // Change state of edit icon
        $('#lnkEditEmailAddress').removeClass("btn-primary");
        $('#lnkEditEmailAddress').find('i').addClass("icon-white icon-edit").addClass('icon-ok');
        $('#lnkEditEmailAddress').siblings('input[type=text]').removeAttr('disabled', true); }
}

这是一个有效的jsfiddle

有人可以确定需要进行哪些更改才能使输入/图像恢复到原始禁用状态?这是否与页面加载时不在DOM中的类有关?

显然有一种无法找到导致错误的网络方法

1 个答案:

答案 0 :(得分:1)

问题是,updateEmailAddress()完成运行后,您的功能不会停止。相反,它会继续并立即重新添加btn-primary。试试这个:

$('.controls a[data-attr="editEmailAddress"]').on('click', function (e) {
    e.preventDefault();
    if ($(this).hasClass("btn-primary")) {
        updateEmailAddress();
        return; // note this addition
    } else {
        hideSuccess();
    }
    $(this).addClass("btn-primary"); // if you don't return, this gets called right after .removeClass(...)
    $(this).find('i').addClass("icon-white icon-edit").addClass('icon-ok');
    $(this).siblings('input[type=text]').attr('disabled', false);
});