Javascript 排除选择菜单表单onclick onclick事件
我正在使用DataTables(),其中有可单击的行。以下是我的代码:Javascript 排除选择菜单表单onclick onclick事件,javascript,jquery,html,Javascript,Jquery,Html,我正在使用DataTables(),其中有可单击的行。以下是我的代码: $(document).ready(function() { let city = document.getElementById("cityselect").value; var table = $('#resdatatable').DataTable(); $('#resdatatable tbody').on('click', 'tr', function () { var d
$(document).ready(function() {
let city = document.getElementById("cityselect").value;
var table = $('#resdatatable').DataTable();
$('#resdatatable tbody').on('click', 'tr', function () {
var data = table.row( this ).data().id;
alert ("clicked!");
} );
} );
在那些可点击的行中,我有一个选择框,onchange调用函数。看起来像这样:
<select id ="resstatus1" onchange="changeResStatus(1)" data-previousvalue="Confirmed">
我遇到的问题是,在Chrome(而不是Safari)中,当单击选择框时,我会收到一个警报。我需要确保单击选择框不会触发警报。我该怎么做
谢谢 您可以通过检查目标元素来实现这一点。我做了一个小的,通用的小提琴,你可以测试。我相信这就是你想要做的。现在,当您单击select元素时,您将不会得到该警报消息,但是如果您在其他任何地方单击tr,您将看到该警报消息 小提琴:
$(文档).ready(函数(){
//让city=document.getElementById(“cityselect”).value;
//var table=$('#resdatatable').DataTable();
$('table td')。在('click',函数(e)上{
如果(例如,目标!==此){
返回;
}否则{
//var data=table.row(this.data().id);
警报(“单击!”);
}
});
});代码>
表格{
宽度:100%;
边框:1px实心;
}
tr{
宽度:100%;
}
1.
2.
3.
4.
我是这样做的,效果很好:
$('#resdatatable tbody').on('click', 'tr', function (e) {
if($(e.target).is('select')){
e.preventDefault();
return;
}
};
提到的其他方法破坏了整个单击功能。实现这一点的一个简单而干净的方法是在事件上使用该函数-这可以防止事件在DOM树中冒泡,因此父元素上的事件处理程序不会收到该事件的通知。如果将此应用于单击选择
,则不会触发附加到父单元格或行等的任何事件
演示:
$('resdatatable tbody')。在('click','select',函数(e)上{
e、 停止传播();
});
$('resdatatable tbody')。在('click','tr',函数(e)上{
警惕(“你好”);
});代码>
表格{
边界塌陷:塌陷;
}
表td{
边框:1px实心#中交;
填充物:5px;
}
您好,您可以单击此位
单击此按钮不会触发事件
您可以发布onclick函数的代码吗?只需删除警报(“单击!”)
?@JimmyAdaro这就是我要求提供其余代码的原因,因为我不知道他是否出于其他原因需要此警报。很抱歉,实际函数运行Ajax代码通过PHP访问MySQL数据库。我只是把它拿出来,换成了“警告(“点击!”);”来简化问题。我想让行发出警报,但不想让行中的选择框发出警报。奇怪的是,在示例中,它会打断数据表中可单击的行。还有别的办法吗?@Tony你说它坏了是什么意思?布局搞砸了?没有点击事件触发?这可能是因为我在代码中使用了不同的选择器