[英]JQuery selector to negate specific HTML elements within a parent element
我有一个由JQuery multiselect下拉库生成的HTML标签结构,如下所示:
<label for="ui-multiselect-selectedSku-option-1"><input id="ui-multiselect-dropdown-option-1" type="radio" value="DropDownVal1"><span>DropDownText1</span></label>
<label for="ui-multiselect-selectedSku-option-2"><input id="ui-multiselect-dropdown-option-2" type="radio" value="DropDownVal2"><span>DropDownText2</span></label>
我的要求是:除了input元素外,只要用户在
<label></label>
(包括标签)区域,我需要执行event.preventDefault()
。 我尝试过
$(document).on('click', 'label[for^="ui-multiselect-selectedSku-option-"]',function(event){
event.preventDefault();
});
但是即使我也单击标签内的<input>
,上述处理程序也会被触发(这很明显,我知道!)
如何编写用于过滤此内容的JQuery选择器。
最好的办法是将输入内容从标签中删除...但是:
我无法控制此标记结构...(您对另一个答案的评论)
您可以在<input>
元素上使用.stopImmediatePropagation()
。因此,click事件不会冒泡到标签上。
参见下文...尝试单击标签,然后在收音机上。
$(document).on('click', 'label[for^="ui-multiselect-selectedSku-option-"]',function(event){ console.log("Clicked on a label"); event.preventDefault(); // Don't know if that is useful... }); $(document).on('click', 'label[for^="ui-multiselect-selectedSku-option-"] input',function(event){ console.log("Clicked on a radio input"); event.stopImmediatePropagation(); });
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <label for="ui-multiselect-selectedSku-option-1"><input id="ui-multiselect-dropdown-option-1" type="radio" value="DropDownVal1"><span>DropDownText1</span></label> <label for="ui-multiselect-selectedSku-option-2"><input id="ui-multiselect-dropdown-option-2" type="radio" value="DropDownVal2"><span>DropDownText2</span></label>
第一个问题是您的标签。 通常,您应该将输入内容包含在标签内,或者使用for属性。 您的for属性用于与标签内的控件不同的控件。 我不确定浏览器将如何处理。
如果您不想单击标签来触发输入,请不要将它们关联起来。 考虑根本不使用标签,而应使用跨度。
如果存在打开/关闭标签是否影响控件的条件,则可以使用代码设置/清除标签的for属性。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.