Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/467.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 具有多个选择器的事件-如何获取触发选择器?_Javascript_Jquery_Jquery Selectors - Fatal编程技术网

Javascript 具有多个选择器的事件-如何获取触发选择器?

Javascript 具有多个选择器的事件-如何获取触发选择器?,javascript,jquery,jquery-selectors,Javascript,Jquery,Jquery Selectors,当使用多个选择器处理jQuery事件时,我可以获取触发该事件的选择器的值吗 我知道有很多类似的问题,但似乎没有一个能回答基本问题 假设我有3个按钮: <button class='red stop danger'>red</button> <button class='amber floor-it caution'>amber</button> <button class='green go safe'>green</button

当使用多个选择器处理jQuery事件时,我可以获取触发该事件的选择器的值吗

我知道有很多类似的问题,但似乎没有一个能回答基本问题

假设我有3个按钮:

<button class='red stop danger'>red</button>
<button class='amber floor-it caution'>amber</button>
<button class='green go safe'>green</button>

如果实现这一点的唯一方法是对
is()

<button class='red stop danger' id="red">red</button>
<button class='green go safe' id="green">green</button>
红色
绿色
然后:

$('#红色,#绿色')。单击(函数(){
单击计数[$(this).attr('id')]+=1;

});

您可以尝试以下方法:

红色
琥珀色
绿色
$('.red、.green')。单击(函数(e){
点击计数[e.target.name]+=1;
警报(“红色”+点击次数。红色);
警报(‘绿色’+点击计数。绿色)
});

如果您想要每个按钮的计数
我个人会将其保存在数据属性中:

$('.red, .green').click(function() {
    lastCount = $(this).data('clicks') || 0;
    $(this).data('clicks', lastCount +1);
});
如果您想要全局红/绿计数,
我会做两个不同的处理程序:

var clickCounts = {
    red: 0,
    green: 0
};

$('.red').click(function() {
    clickCounts.red += 1;
});

$('.green').click(function() {
    clickCounts.green += 1;
});
如果你只是好奇,

很抱歉,对于如何获取jquery事件的触发选择器,我没有实际的答案;我建议您可以使用
元素.matches()
和(对于较旧的浏览器)
元素。匹配选择器
。例如:

$('.red, .green').click(function (e) {
    var sel;
    if ( e.target.matches && e.target.matches('.red') ||
         e.target. matchesSelector && e.target. matchesSelector('.red')) {
        sel = 'red';
    } else {
        sel = 'green';
    }
    clickCounts[sel] += 1;
});
的回调函数支持一个参数()。因此,您可以使用
ev.target
精确定位元素。
var clickCounts = {
    red: 0,
    green: 0
};

$('.red').click(function() {
    clickCounts.red += 1;
});

$('.green').click(function() {
    clickCounts.green += 1;
});
$('.red, .green').click(function (e) {
    var sel;
    if ( e.target.matches && e.target.matches('.red') ||
         e.target. matchesSelector && e.target. matchesSelector('.red')) {
        sel = 'red';
    } else {
        sel = 'green';
    }
    clickCounts[sel] += 1;
});