[英]How to get atributes in <tr> tag when clicking an anchor inside a <td> that points to javascript function
[英]Getting Closest TR with jQuery when clicking on an “OnClick” function inside a TD?
这可能吗? 我使用内联onclick函数阻止获取TR行的事实吗?
我的表格行看起来像这样:
<tr role="row" class="odd"><td><a class="masterskutd" id="mastersku_FL538-J"
onclick="editMasterSKU('FL538-J');return false;">FL538-J</a></tr>
在外部JS文件functions.js
我正在尝试这样的事情
function editMasterSKU(SKU) {
var tr = $(this).closest('tr');
$(tr).addClass('clicked');
// var tr = $(this).parents('tr');
console.log(tr);
我似乎什么也没捕捉到单击该函数的TR, console.log
仅带回长度为0的w.fn.init(0)
(并不完全确定这是什么意思),并且未添加上课。
在td
/ a
单击onclick函数时,如何在jQuery变量中获取TR?
问题是因为从内联事件属性调用的函数不在引发事件的元素的范围内运行。 它们而是在window
范围内运行,因此this
不是您期望的那样。
要解决此问题,您可以将this
作为参数从onclick
传递给函数:
function editMasterSKU(a, SKU) { var tr = $(a).closest('tr'); $(tr).addClass('clicked'); }
.clicked { color: #C00; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <table> <tr role="row" class="odd"> <td> <a class="masterskutd" id="mastersku_FL538-J" onclick="editMasterSKU(this, 'FL538-J');return false;">FL538-J</a> </td> </tr> </table>
但是,值得注意的是,您根本不应该使用内联事件属性。 改用不显眼的事件处理程序。 由于您已经在页面中包含了jQuery,因此可以这样完成:
jQuery(function($) { $('.masterskutd').on('click', function(e) { e.preventDefault(); var $tr = $(this).closest('tr'); $tr.addClass('clicked'); console.log($(this).data('sku')); }); })
.clicked a { color: #C00; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <table> <tr role="row" class="odd"> <td> <a class="masterskutd" id="mastersku_FL538-J" data-SKU="FL538-J" href="#">FL538-J</a> </td> </tr> </table>
请注意,使用data
属性将自定义元数据存储在元素本身中,还添加了href
属性,这是HTML有效的必需属性。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.