2

我有一些javascript,由于某种原因需要连续两次点击才能正常运行。这是链接的代码:

<a href="" onclick="select_all_com(); return false">Select All</a>

现在,这里是使用 onclick 调用的函数的代码:

function select_all_com(){
$("[name=file_com_appeal].com-checkbox").each( function() {   
    $(this).attr('checked', true);
}); 
UpdateTotalFee();
}

最后,这是最后一段代码:

function UpdateTotalFee(){
    var AppealCount = 0;

    $('input[name=file_com_appeal].com-checkbox').each(function(){
    if( $(this).next().hasClass('checked') ){ 
        AppealCount++; } 
    });

    $('#AppealFeeTotal').text("$"+(AppealCount*140));
}

这最后一部分应该在第一次单击链接时运行,但由于某种原因它第一次没有运行,只有第二次运行。具体来说,我的意思是第一次单击会将所有复选框从关闭更新为打开,但不会更新#AppealFeeTotal. 当复选框已被选中时,随后单击“全选”链接会导致#AppealFeeTotal更新。

任何想法为什么这可能需要点击两次?我还应该补充一点,特别是我不确定的一行代码。我从其他人那里继承了代码,但我不确定使用它的原因:

if( $(this).next().hasClass('checked') ){

感谢您可能有的任何想法。

4

2 回答 2

2

有几件事,首先attr('checked')hasClass('checked')我怀疑这是您的问题所在不同。您的代码没有添加我可以看到的“已检查”类,但您正在计算这种情况。您应该is:checked为此使用选择器。

其次,如果我正确阅读了您的代码,您只需计算选中的复选框即可获得总数。您可以像这样更有效地执行此操作:

$(":checkbox").filter(':checked').length

自然地,您会想要改进该选择器(因此它只计算特定的复选框)但没有更多的 html,我对此无能为力。

于 2012-12-26T04:25:25.950 回答
1
$(document).ready( function() { // this is a function which execute when document is ready in jQuery
var clicks = 0; // I am taking clicks variable so, to check whether the user have clicked for the first time

$("a").on("click", function() { // this is a function which execute when target anchor tag is clicked
    clicks++; // now user have clicked the anchor tag so, i have to increase value to 1
    if(clicks==1) { // this condition checks whether user have clicked the anchor tag for the first time? if yes, then execute the code
        $("[name=file_com_appeal].com-checkbox").each( function() { // this is a each function which loops through all targets perform operations
        $(this).attr('checked', true); // while looping through all targets this will set attribute or property "checked" to true means its checked
        });
    }
    else if(clicks==2) { // this conditions check that whether anchor tag is clicked for second time
        var AppealCount = 0;
        $('input[name=file_com_appeal].com-checkbox').each(function(){
            if( $(this).prop('checked') ){ 
                AppealCount++; 
            } 
        });
        $('#AppealFeeTotal').text("$"+(AppealCount*140));
        clicks = 0; // set to zero because if user repeatedly clicks the anchor tag
    }
});
});
于 2012-12-26T04:23:19.133 回答