【问题标题】:jQuery/Javascript CheckboxjQuery/Javascript 复选框
【发布时间】:2013-07-11 16:47:16
【问题描述】:

我想用复选框做这样的事情。如果用户点击复选框,它应该改变它的状态(选中 -> 未选中和 vv. )。

我的代码:

$('#checkBoxStandard').change(function() {
    clickedFormBoxen('standard');
});


function clickedFormBoxen(active){
if(active == 'standard'){

    if( $('#checkBoxStandard').is(":checked")){

        $('#checkBoxStandard').prop("checked", false);

    }else{

        $('#checkBoxStandard').prop("checked", true);
    }

    console.log('ac: '+$('#checkBoxStandard').is(':checked'));
}

很遗憾,该复选框不会再次被取消选中。第一次,复选框被选中,但如果我再次点击它,没有任何反应,它仍然被选中。

我希望使用此代码,这样我就可以通过函数调用来更改复选框的状态,而不仅仅是通过用户交互。

请帮助我,对不起我的英语^^

【问题讨论】:

  • 据我所知,您还原了导致更改事件触发的用户操作更改。你如何设置复选框的初始状态?

标签: javascript jquery checkbox checked prop


【解决方案1】:

试试

$('#checkBoxStandard').removeAttr("checked");

【讨论】:

【解决方案2】:

你的意思是这样的? (jsFiddle)

HTML

<input type="checkbox" id="checkbox">
<label for="checkbox">Hey,check me!</label>

JavaScript

var respond = true;

function manualCheck(state)
{
    respond = false;
    $('#checkbox').prop("checked", state);
}

$('#checkbox').change(function ()
{
    if (!respond)
    {
        respond = true;
        return;
    }

    // Your code
}

【讨论】:

    【解决方案3】:

    正如我在对您的问题的评论中提到的那样,使用您的函数clickedFormBoxen 您可以有效地恢复用户交互对复选框元素的影响。因此,您似乎必须从复选框元素上的单击处理程序调用更改处理程序(我已经简化了代码):

    function clickedFormBoxen(active) {
        if (active == 'standard') {
            $('#checkBoxStandard').prop("checked", !($('#checkBoxStandard').prop("checked")));
        }
    }
    
    $(document).ready( function(){
        $('#checkBoxStandard').change( function(e) {
            clickedFormBoxen('standard');
            1;
        });
    
        $('#checkBoxStandard').click(function(e) {
            $('#checkBoxStandard').change();
            1;
        });
    });
    

    【讨论】:

    • 现在我有一个“问题”,即单击“clickedFormBoxen”被调用了 2 次。我有像你所说的 click&change 的 clickevent。函数 clickedFormBoxen(active){if(active == 'standard'){ $('#checkBoxStandard').prop("checked", !($('#checkBoxStandard').prop("checked"))); if( $('#checkBoxStandard').is(":checked")){ form = active; }else{ 形式 = null; } } console.log("mhh: "+form);
    • 这是设计使然。对clickedFormBoxen 的一次调用通过用户操作恢复复选框切换,第二次执行更改。以编程方式设置复选框仅导致 1 次调用,因为没有单击事件。你有(至少)2个选项来摆脱额外的调用:防止用户点击后自动切换(我还没有找到方法)或触发点击事件而不是以编程方式设置复选框状态(这我不知道它是否适合您的整体应用程序设计)。
    猜你喜欢
    • 2017-09-05
    • 1970-01-01
    • 2021-04-07
    • 2011-02-21
    • 1970-01-01
    • 1970-01-01
    • 2015-05-09
    • 1970-01-01
    • 2015-02-18
    相关资源
    最近更新 更多