如果ajax失败,Jquery单选按钮会阻止单击事件的默认值

时间:2014-02-19 11:31:48

标签: jquery ajax preventdefault

我有单选按钮。单击 Ajax 请求并返回响应。 success变量会收到结果(truefalse)。我需要的是仅在 ajax 成功时才检查无线电。但它在调用ajax之前标记为已检查。

$('input[type="radio"]').on('click',function (e){
    var success = callAjax();
    if (!success)
       e.preventDefault();
});

UPD。

使用preventDefault的原因是选中前一个单选按钮。不只是取消选中当前。

4 个答案:

答案 0 :(得分:1)

当ajax返回true时,使用$(this).prop("checked",false);检查单选按钮。

以下代码可以帮助您..

$('input[type="radio"]').on('click',function (e){
    var success = callAjax();;
    if (!success){
        e.preventDefault();
        $(this).prop("checked",false);
    }
});

现场演示请查看JSFIDDLE

答案 1 :(得分:1)

$('input[type="radio"]').on('click',function (e){
    var success = callAjax();
    if (!success){
       $(this).prop('checked', false);
    }

});

答案 2 :(得分:0)

所有AJAX请求都是异步运行的,这意味着您在执行AJAX请求后不会立即得到响应。

您需要稍微更改一下代码才能使其正常工作:

$('input[type="radio"]').on('click',function (e){
    var _this = this;
    var currentState = $(this).prop("checked");
    callAjax(function(success) {
        if (!success)
             $(_this).prop("checked", !currentState);
    });
});

您应该更改callAjax方法以接收回调函数作为参数,然后通过success参数调用请求完成。

我希望你有个主意!

答案 3 :(得分:0)

您可以使用以下方式选中/取消选中您的复选框:

$("#chkBox").attr('checked', false); //uncheck 
$("#chkBox").attr('checked', true); //check