Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/78.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 排除选择菜单表单onclick onclick事件_Javascript_Jquery_Html - Fatal编程技术网

Javascript 排除选择菜单表单onclick onclick事件

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

我正在使用DataTables(),其中有可单击的行。以下是我的代码:

$(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你说它坏了是什么意思?布局搞砸了?没有点击事件触发?这可能是因为我在代码中使用了不同的选择器