iCheck并手动设置复选框以进行检查

mat*_*boy 7 javascript jquery icheck

我正在使用iCheck框架,我有两个输入

<input name="group" id="id1" type="radio" checked>
<input name="group" id="id2" type="radio">
<input name="group" id="id3" type="radio">
<input name="group" id="id4" type="radio">
Run Code Online (Sandbox Code Playgroud)

点击后我调用ajax函数.如果出现故障,我想将checked属性设置为先前选择的输入.

var currentChecked = $("input[name='group']:radio:checked");

$("input[name='group']:radio").each(function() {
        $(this).on('ifChecked', function(){
               $.ajax({
                    url: "/ajax/something/"
                })
                .done(function (data) {
                    currentChecked = $(this);
                })
                .fail(function (data) {
                    $(this).removeAttr('checked');
                    currentChecked.prop('checked', true);
                });
 });
});
Run Code Online (Sandbox Code Playgroud)

但这不会重置已选中的复选框.有什么我从iCheck框架中看不到的东西?有解决方案吗

Bin*_*Das 15

实际上,如果iCheck您需要更新iCheck以反映Jquery上的更改.

您可以使用更新 iCheck('update')

$(this).iCheck('update');
Run Code Online (Sandbox Code Playgroud)

使用jquery选中或取消选中单选按钮后.

另一种解决方案只是checkuncheckiCheck用他的预定义功能.

<input name="group" id="id1" type="radio" checked>
Run Code Online (Sandbox Code Playgroud)

如果以上是您的单选按钮,您可以使用jquery部分中的代码,如下所示

$('#id1').iCheck('uncheck'); //To uncheck the radio button
$('#id1').iCheck('check'); //To check the radio button
Run Code Online (Sandbox Code Playgroud)

在这种情况下无需使用 iCheck('update')


Dav*_*iah 2

jQuery iCheck 的工作方式与您期望的方式有些不同。

\n\n

当您初始化复选框或单选按钮时,它会获取控件的状态/值并构建该状态的外观和感觉。就这些。然后它永远不会检查您的控制值或其属性的任何更新。

\n\n

因此,在 Ajax 失败事件中取消选中复选框的唯一方法是使用插件公开的函数。

\n\n

您应该在 ajax 失败事件中使用以下命令将状态更改回之前的状态

\n\n
$(this).iCheck('toggle');\n
Run Code Online (Sandbox Code Playgroud)\n\n

或者您可以更改 html 属性并刷新控件,如下所示

\n\n
$(this).removeAttr('checked');\ncurrentChecked.prop('checked', true);\n$(this).iCheck('update'); \xe2\x80\x94 apply input changes, which were done outside the plugin\n
Run Code Online (Sandbox Code Playgroud)\n