标签触发点击功能两次

Posted

技术标签:

【中文标题】标签触发点击功能两次【英文标题】:Label fires click function twice 【发布时间】:2010-11-16 11:42:16 【问题描述】:

有什么方法可以调用函数,同时通过点击标签来保存单选按钮的效果?

示例(我需要通过单击单选按钮的标签来打开/关闭带有复选框的字段集)

渡//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">点击标签 【参考方案1】:

e.preventDefault(); 的问题是它会阻止标签点击检查单选按钮。

更好的解决方案是简单地添加一个“已检查”快速检查,如下所示:

$("label").click(function(e)
  var rbtn = $(this).find("input");
  if(rbtn.is(':checked'))
    **All the code you want to have happen on click**
  
);

【讨论】:

【参考方案2】:

改为使用单选按钮上的焦点事件。

试试这个:

<script type="text/javascript">
    $(function() 
        accordionOptions();
    );
    var accordionOptions = function()
        $("label.legend > input, label.childless > input").focus(function(event) 
            var el = $(this).parent();
            var opposites = $(".subtype").not(el.next());
            opposites.find("input:checked").attr("checked", false);
            opposites.removeClass("expanded");
            el.siblings("label").removeClass("expanded");
            el.next(".subtype").toggleClass("expanded");
            el.toggleClass("expanded");
        );
    
</script>

【讨论】:

谢谢,杰森。我重复之前的解决方案。这个很酷。但在这种情况下 label 和 next fieldset.subtype 的属性 toggleClass 无效。如果我们将新的设计规则添加到 .expanded 类中(例如 .expanded display: block !important; background: #FCC),将会很明显。【参考方案3】:
- $("label.legend, label.childless").click( function(event)
+ $("label, input").click( function(event)

...然后是一些化妆品来保持无线电标签的位置。

【讨论】:

谢谢,安德烈斯。这是很酷的解决方案。但在这种情况下 label 和 next fieldset.subtype 的属性 toggleClass 无效。如果我们将新的设计规则添加到 .expanded 类中(例如 .expanded display: block !important; background: #FCC),将会很明显。【参考方案4】:

这对我有用:

$("label.legend, label.childless").click( function(event)
  var opposites = $(".subtype").not($(this).next());
  var el = $(this);
  opposites.find("input:checked").removeAttr('checked');
  opposites.removeClass("expanded");
  el.siblings("label").removeClass("expanded");
  el.next(".subtype").addClass("expanded");
  el.toggleClass("expanded");
);    

正在用 toggleClass 交换 addClass。

【讨论】:

以上是关于标签触发点击功能两次的主要内容,如果未能解决你的问题,请参考以下文章

在“点击,点击”事件触发两次。如何避免?

按钮onclick功能触发两次

关于js中点击一次触发两次事件

关于jQuery中动态生成的点击事件触发两次的讨论

AJAX 请求触发两次,而成功调用一次

为啥/何时我必须点击两次才能触发 iOS 上的点击