【问题标题】:Is it possible to stop a checkbox from changing when clicked, pending some check?是否可以在单击时阻止复选框更改,等待检查?
【发布时间】:2015-10-14 14:26:55
【问题描述】:

我今天遇到了一种情况,我希望复选框不会更改,除非关联的 ajax 调用成功。 “不更改”是指 - 如果当前选中了复选框,那么在 ajax 调用完成并成功之前,它不应显示为未选中。

示例 HTML:

<input type="checkbox" id="a" />

示例(伪)jQuery:

$("#a").change(function(e) {
    //somehow stop the checkbox from showing as checked in the UI
    $.ajax...
        success: function() {
            //checkbox should now show as checked in the UI
        },
        error: function() {
            //show error to user.  checkbox should still be unchecked.
        }
});

各种谷歌搜索只找到了获取或更改复选框状态的参考。

现在我只是在出错的情况下将复选框的状态改回来。

我想这可以通过使用图像来表示复选框并在适当的时间更改它们来完成,但我正在寻找一种使用“本机”HTML 元素、CSS 和/或 Javascript(或某些 Javascript 库)的解决方案)。只是好奇 stackoverflow 用户对此有什么看法。

谢谢!

【问题讨论】:

  • 你真的应该考虑一个不同的设计,比如使用一个按钮,然后用一个选中的复选框交换,或者其他一些设计(也许问User Experience?)。除了选中或取消选中复选框之外,我不希望单击复选框来执行任何操作。它可能会显示或隐藏单独的 UI,但仅此而已。
  • @MikeMcCaughan 谢谢,但我只是好奇这在技术上是否可行。关于用户体验,我同意如果您需要即时更新一些布尔值(而不是选中或取消选中一个框然后点击提交按钮),使用类似开/关滑块可能会更好。我只是在想,既然有一个内置元素,也就是一个复选框,那为什么不使用它呢。

标签: javascript jquery html ajax checkbox


【解决方案1】:

尝试使用而不是change()click() 函数并阻止其中的默认操作。然后成功后,您可以手动更改复选框状态。

这里example

$("#a").click(function(e) { 

        $.ajax...
            success: function() {
               $('a').attr('checked','checked')
            },
            error: function() {
                //show error to user.  check box should still be unchecked.
            }
        e.preventDefault();
        return false;
    });

【讨论】:

    【解决方案2】:

    是否可以阻止复选框在单击时更改,待处理 检查一下?

    是的,您可以在运行 ajax 查询时暂时禁用该复选框。


    看来你已经在使用jquery了,基于此,你可以试试:

    $("#a").change(function(e) {
        $("input#a").attr("disabled", true); //disable input
    
        $.ajax...
            success: function() {
                $("input#a").removeAttr("disabled"); //re-enable input
            },
            error: function() {
                //show error to user.  check box should still be unchecked.
            }
    });
    

    注意:

    您还应该在error: function() 中启用checkbox,但我关注了您的评论,因为我不知道您要完成什么。

    【讨论】:

    • 我很确定你应该使用jQuery.fn.prop 来设置/获取选中的属性
    • s/你应该使用/推荐使用/blog.jquery.com/2011/05/12/jquery-1-6-1-released
    • 谢谢,我尝试在点击时禁用它,但它仍然改变了。
    • @PedroLobito 我刚刚尝试过,在禁用之前该框仍显示为选中状态。
    • 我之前测试过代码,它按预期工作。我猜你已经找到了解决方案,很高兴它成功了:)
    猜你喜欢
    • 2010-09-16
    • 1970-01-01
    • 1970-01-01
    • 2011-10-16
    • 1970-01-01
    • 2021-06-08
    • 1970-01-01
    • 2013-05-30
    • 2010-12-03
    相关资源
    最近更新 更多