Javascript 在函数中检测哪个元素调用函数而不将其作为参数传递?
这是我的html标记:Javascript 在函数中检测哪个元素调用函数而不将其作为参数传递?,javascript,jquery,opencart,Javascript,Jquery,Opencart,这是我的html标记: <a onclick="cart.add('10');" class="product-10">Add to cart</a> <a onclick="cart.add('11');" class="product-11">Add to cart</a> <a onclick="cart.add('12');" class="product-12">Add to cart</a> 是否有一种方法可以
<a onclick="cart.add('10');" class="product-10">Add to cart</a>
<a onclick="cart.add('11');" class="product-11">Add to cart</a>
<a onclick="cart.add('12');" class="product-12">Add to cart</a>
是否有一种方法可以在不编辑html标记的情况下检测名为cart.add
的a
更新
a
标记没有class
,我添加这些类只是为了演示,实际上我需要a
对象本身,因为我想访问它的下一个同级,我的标记是这样的:
<div><a onclick="cart.add('10');">Add to cart</a><input type="text" name="quantity" /></div>
首先,删除内联
onclick
(这是一种不好的做法)并注册一个事件侦听器:
HTML
<a id="10" class="product-10">Add to cart</a>
编辑
基本上,通过执行removeInlineHandlers
来检查此解决方法,您可以删除inlineonclick
属性,并分配一个事件处理程序,该事件处理程序调用传递单击元素的add
函数:
函数removeInlineHandlers(){
$('a')。每个(函数(){
var,该值=$(此值);
var thisId=that.attr('onclick').match(/\d+/);
.removeAttr('onclick')
.on('单击',函数()){
cart.add(thisId,that);
});
})
}
变量车={
“添加”:函数(产品id,元素){
警报('Added id:'+product_id+',数量:'+elem.next('input').val());
}
}
removeInlineHandlers()代码>
添加到购物车
添加到购物车
添加到购物车最佳或理想的方法是使用jQuery
事件侦听器。就我个人而言,我会找到一种改变HTML的方法
但是如果您确实不能更改HTML,那么可以使用onclick
属性作为选择器。这是个坏习惯
比如:
var-cart={
“添加”:函数(产品id){
//$(“[onclick=\”cart.add(“+product\u id+”);\”])使用onclick=“cart.add(this,'10');”
和'add”:函数(元素,product\u id){
是的,我知道,但我正在寻找一种不用编辑html部分的方法。然后你就不用onclick=“cart.add('10');”
并使用不引人注目的事件句柄谢谢您的回答,请查看我的更新问题。谢谢您的回答,请查看我的更新问题。另外,我正在寻找一种不编辑html部分的方法。
var cart = {
'add': function(product_id) {
//What I want console.log(element_that_was_clicked.next().val());
}
}
<a id="10" class="product-10">Add to cart</a>
$(document).on('click', 'a', function() {
var product_id = $(this).attr('id'); // Or any other attribute
cart.add(product_id);
});