具有相同类的按钮与JQuery单击函数

时间:2016-10-06 03:47:20

标签: javascript jquery ajax click

  

所有这些代码都在 $(文件).ready(function(){

“全选”的JSP及其下的复选框:

<div class="select-all-columns select-all-link"><a href="#">Select All</a></div>                            
<s:iterator value="#customReports.dataAttributes" var="col" status="status">
    <div class="col-option">
        <label>
            <s:if test="%{#col.required == true}">
                <input id="report-attribute-${col.id}" disabled="disabled" checked="checked" class="column-check <s:property value="reportType"/>-column-check" type="checkbox" value="${col.name},${col.label},${col.dataType}"/>
            </s:if>
            <s:else>
                <input id="report-attribute-${col.id}" class="column-check <s:property value="reportType"/>-column-check" type="checkbox" value="${col.name},${col.label},${col.dataType}"/>
            </s:else>
            <div class="column-label">${col.label}</div>
        </label>
    </div>
</s:iterator>

我有 6个div(每个都有一个类“.related-settings-tab”每个div 包含“a”元素 (请阅读下面有关此“a”元素的其他详细信息)和多个复选框。 .done()功能的作用是显示/向下滑动显示选择此div中的所有按钮和复选框。下面是如何调用selectAllFields()函数的代码:

$(".related-settings-tab").click(function(){
    ....
    $.ajax({
        ....
    }).done(function(){
        selectAllFields();
    });
});

我有一个 6 元素“a”,它的功能是“全选”“取消全选”< / strong>其下的复选框。以下是选择所有复选框的代码:

function selectAllFields(){
    $(".request-columns").click(function(){
        $(this).toggleClass("checked-all");
        var checkBox = $(this).siblings().find(".column-check");
        if($(this).hasClass("checked-all")){
            $(this).find("a").html("Deselect All");
            $(checkBox).each(function(){
                $(this).prop('checked', true);
            });
        } else {
            $(this).find("a").html("Select All");
            $(checkBox).each(function(){
                var disabled = $(this).attr("disabled");
                if(disabled != "disabled"){
                    $(this).prop('checked', false);
                }
            });
        } 
    }); 
}

如果我点击第一个“全选”按钮, $(“。request-columns”)。点击(function(){.. 会被触发。这意味着第一个“全选”按钮现在有一个“全部检查”类(由toggleClass代码创建)。

然后我点击第二个“全选”按钮。同样,现在有一个“全部检查”类第一个和第二个“全选”按钮(现在更改为“取消全选”文字)的课程为“全部检查”。

  

我再说一遍,我有 6个按钮使用相同的类“.request-columns”。   但在这个例子中,我只使用前2个按钮

当我尝试“取消全部选择”时,它可以取消选择。 输入上面写的其他代码

当我尝试“取消全部取消”第一个时,输入其他代码但是,之后再次输入if代码

因此我无法取消选择之前切换的按钮。 由于这个原因,它仍然是“全部检查”类。

2 个答案:

答案 0 :(得分:1)

从ajax调用的done函数中删除函数并委托你的click事件,在else语句中你需要检查元素是否被选中,如果它被禁用

$('body').on('click',".request-columns",function(){
        $(this).toggleClass("checked-all");
        var checkBox = $(this).siblings().find(".column-check");
        if($(this).hasClass("checked-all")){
            $(this).find("a").html("Deselect All");
            $(checkBox).each(function(){
                $(this).prop('checked', true);
            });
        } else {
            $(this).find("a").html("Select All");
            $(checkBox).each(function(){
                if($(this).is(':checked')){
                    $(this).prop('checked', false);
                }
            });
        } 
    }); 

答案 1 :(得分:0)

你的最终html看起来不太清楚(你应该用你的问题发布生成的html)。也就是说,这应该对你有用,并消除了重复的代码:

    Traceback (most recent call last):
  File "/var/lib/ambari-agent/cache/common-services/ZOOKEEPER/3.4.5.2.0/package/scripts/zookeeper_server.py", line 179, in <module>
    ZookeeperServer().execute()
  File "/usr/lib/python2.6/site-packages/resource_management/libraries/script/script.py", line 219, in execute
    method(env)
  File "/var/lib/ambari-agent/cache/common-services/ZOOKEEPER/3.4.5.2.0/package/scripts/zookeeper_server.py", line 70, in install
    self.configure(env)
  File "/var/lib/ambari-agent/cache/common-services/ZOOKEEPER/3.4.5.2.0/package/scripts/zookeeper_server.py", line 49, in configure
    zookeeper(type='server', upgrade_type=upgrade_type)
  File "/usr/lib/python2.6/site-packages/ambari_commons/os_family_impl.py", line 89, in thunk
    return fn(*args, **kwargs)
  File "/var/lib/ambari-agent/cache/common-services/ZOOKEEPER/3.4.5.2.0/package/scripts/zookeeper.py", line 40, in zookeeper
    conf_select.select(params.stack_name, "zookeeper", params.current_version)
  File "/usr/lib/python2.6/site-packages/resource_management/libraries/functions/conf_select.py", line 266, in select
    shell.checked_call(get_cmd("set-conf-dir", package, version), logoutput=False, quiet=False, sudo=True)
  File "/usr/lib/python2.6/site-packages/resource_management/core/shell.py", line 70, in inner
    result = function(command, **kwargs)
  File "/usr/lib/python2.6/site-packages/resource_management/core/shell.py", line 92, in checked_call
    tries=tries, try_sleep=try_sleep)
  File "/usr/lib/python2.6/site-packages/resource_management/core/shell.py", line 140, in _call_wrapper
    result = _call(command, **kwargs_copy)
  File "/usr/lib/python2.6/site-packages/resource_management/core/shell.py", line 291, in _call
    raise Fail(err_msg)
resource_management.core.exceptions.Fail: Execution of 'conf-select set-conf-dir --package zookeeper --stack-version 2.4.3.0-227 --conf-version 0' returned 1. zookeeper not installed or incorrect package name