完成两个功能需要多次点击

时间:2012-12-26 04:18:05

标签: javascript jquery codeigniter

我有一些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') ){

感谢您提出的任何想法。

2 个答案:

答案 0 :(得分:2)

一些事情,第一个attr('checked')hasClass('checked')不同我怀疑这是你的问题所在。您的代码不会添加我可以看到的“已检查”类,但您可以计算出这种情况。您应该使用is:checked选择器。

其次,如果我正确阅读了您的代码,您只需计算选中的复选框即可获得总数。你可以像这样更有效地做到这一点:

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

当然你会想要改进那个选择器(因此它只计算特定的复选框)但是如果没有更多的html,我就无法帮助你。

答案 1 :(得分: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
    }
});
});