如果我在每个div
中都有两个checkbox
个复选框,我怎样才能找出点击了哪个<div id="num-1">
<input type="checkbox" name="check-1" value="check-1">Checkbox "check-1" of the Div "num-1"
<br>
</div>
<div id="num-2">
<input type="checkbox" name="check-1" value="check-1">Checkbox "check-2" of the Div "num-2"
<br>
</div>
?
s = "..."
Set re = New RegExp
re.Pattern = "^[\s\S]*?Match: (.*)[\s\S]*"
WScript.Echo re.Replace(s, "$1")
&#13;
如果您建议使用JS (不是jQuery)的方法,我将不胜感激。
答案 0 :(得分:2)
一种方法是使用事件委托和名称属性。一旦您的目标是复选框,您就可以访问此对象的任何内容,包括它的值,名称或是否已选中
<form class="someform">
<div id="num-1">
<input type="checkbox" name="check-1" value="check-1"> Checkbox "check-1" of the Div "num-1" <br>
</div>
<div id="num-2">
<input type="checkbox" name="check-2" value="check-1"> Checkbox "check-2" of the Div "num-2" <br>
</div>
</form>
<![CDATA[
.. your xml ..
]]>
答案 1 :(得分:1)
这可以用不同的方式实现,我建议不要在循环中定义回调函数,因为这会定义它几次(在每次迭代中),所以你可以将它声明一次离开循环然后附加点击使用addEventListener()
属性name
使用事件委派check-1
对复选框进行(或更改)事件:
var checkboxes = document.getElementsByName('check-1');
for(var i=0;i<checkboxes.length;i++){
checkboxes[i].addEventListener('click', getParent);
//checkboxes[i].addEventListener('change', getParent);
}
然后,您必须定义每次用户click/change
复选框(我的示例中为getParent()
)时都会触发的函数,并且在此函数内部您可以使用.parentNode
method plus { {1}}获取父div的.id
属性:
id
function getParent(){
alert(this.parentNode.id);
}
var checkboxes = document.getElementsByName('check-1');
for(var i=0;i<checkboxes.length;i++){
checkboxes[i].addEventListener('click', getParent);
}
function getParent(){
alert(this.parentNode.id);
}
答案 2 :(得分:0)
使用jQuery
(虽然没有标记!)
将.closest
与Attribute Starts With Selector
$('[type="checkbox"][name^="check-"]').on('change', function() {
console.log($(this).closest('div[id^="num-"]').get(0));
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<div id="num-1">
<input type="checkbox" name="check-1" value="check-1">Checkbox "check-1" of the Div "num-1"
<br>
</div>
<div id="num-2">
<input type="checkbox" name="check-1" value="check-1">Checkbox "check-2" of the Div "num-2"
<br>
</div>
使用VanillaJS
document.querySelectorAll
选择type="checkbox"
元素[].foreach.call
来迭代array-like
对象(具有length
属性)addEventListener
附加change
活动Element.parentNode
将返回当前元素的parent-element
var elems = document.querySelectorAll('[type="checkbox"]');
[].forEach.call(elems, function(el) {
el.addEventListener('change', function() {
console.log(this.parentNode);
});
});
<div id="num-1">
<input type="checkbox" name="check-1" value="check-1">Checkbox "check-1" of the Div "num-1"
<br>
</div>
<div id="num-2">
<input type="checkbox" name="check-1" value="check-1">Checkbox "check-2" of the Div "num-2"
<br>
</div>
答案 3 :(得分:0)
您可以使用点击复选框的parentElement
属性,如下所示:
function detectDiv(obj) {
var parent = obj.parentElement;
console.log(parent.id);
}
<div id="num-1">
<input type="checkbox" name="check-1" value="check-1" onclick="detectDiv(this)"> Checkbox "check-1" of the Div "num-1" <br>
</div>
<div id="num-2">
<input type="checkbox" name="check-1" value="check-1" onclick="detectDiv(this)"> Checkbox "check-2" of the Div "num-2" <br>
</div>
答案 4 :(得分:0)
您可以使用querySelectorAll()
和for
循环并返回parentNode
div
var inputs = document.querySelectorAll('input[type="checkbox"]');
for (var i = 0; i < inputs.length; i++) {
inputs[i].addEventListener('change', function() {
console.log(this.parentNode.id);
})
}
&#13;
<div id="num-1">
<input type="checkbox" name="check-1" value="check-1">Checkbox "check-1" of the Div "num-1"
<br>
</div>
<div id="num-2">
<input type="checkbox" name="check-1" value="check-1">Checkbox "check-2" of the Div "num-2"
<br>
</div>
&#13;
答案 5 :(得分:0)
你可以添加一个点击或更改处理程序,它将复选框作为参数,然后导航到父节点。
示例:
function checkboxChange(checkbox) {
console.log(checkbox.parentNode.id);
}
HTML:
<div id="num-1">
<input type="checkbox" name="check-1" value="check-1" onchange="checkboxChange(this)"> Checkbox "check-1" of the Div "num-1" <br>
</div>
<div id="num-2">
<input type="checkbox" name="check-1" value="check-1" onchange="checkboxChange(this)"> Checkbox "check-2" of the Div "num-2" <br>
</div>
答案 6 :(得分:0)
假设您在所有<div>
#num-x
周围都有<div>
,您可以使用事件委派来确定单击了哪个复选框,然后获取其父级:
document.getElementById("num-container").addEventListener("click", function(e){
if(e.target.type == "checkbox"){
console.log("Parent div:", e.target.parentNode, "Checked?", e.target.checked);
}
});
<div id="num-container">
<div id="num-1">
<input type="checkbox" name="check-1" value="check-1">Checkbox "check-1" of the Div "num-1"
<br>
</div>
<div id="num-2">
<input type="checkbox" name="check-1" value="check-1">Checkbox "check-2" of the Div "num-2"
<br>
</div>
</div>
答案 7 :(得分:0)
以下示例将在单击时记录每个输入的id
值。
var inputs = document.querySelectorAll('input');
Array.prototype.forEach.call(inputs, function(input) {
input.addEventListener('click', findParent);
});
function findParent() {
console.log(this.parentNode.id);
}
<div id="num-1">
<input type="checkbox" name="check-1" value="check-1">Checkbox "check-1" of the Div "num-1"
<br>
</div>
<div id="num-2">
<input type="checkbox" name="check-1" value="check-1">Checkbox "check-2" of the Div "num-2"
<br>
</div>
逐步分解......
首先使用querySelectorAll
并传入输入选择器以获取nodeList
中的所有所需输入。我们会将此保存到var inputs
。
(我的建议是,如果您控制了您的标记,则为每个输入使用共享类,这样您就不会定位所有输入)
然后通过调用inputs
Array
prototype of forEach
上的nodeList
来遍历每个节点,这允许您遍历每个节点(输入)。在迭代中,您向输入添加eventListener
并发出回调函数以在调度事件时触发。
在回调函数中,定位输入的parentNode
,它返回DOM中的第一个升序节点。最后,要获取输入的ID,只需使用.id
。
答案 8 :(得分:0)
这是一个纯JavaScript解决方案:
// HTML code
<div id="num-1">
<input type="checkbox" name="check-1" value="check-1"> Checkbox "check-1" of the Div "num-1" <br>
</div>
<div id="num-2">
<input type="checkbox" name="check-1" value="check-1">Checkbox "check-2" of the Div "num-2"
<br>
</div>
// javascript code
checkboxes = document.querySelectorAll('input[type="checkbox"]');
for(var i=0;i < checkboxes.length;i++){
// add event listener for each input element
checkboxes[i].addEventListener('change',function(e){
console.log(this.parentElement); // will log the direct parent
});
}