单击禁用的选择元素不会't在其上触发点击或鼠标按下事件'的父级
Clicking disabled select element doesn't trigger click or mousedown events on it's parent
禁用的元素(如<select>
和<input>
)不会对点击事件做出反应,我正试图将它们封装在<div>
中,并侦听它的点击事件。
单击禁用的<input>
会触发对其容器<div>
的单击,但我对<select>
元素有问题。单击禁用的<select>
元素不会触发容器<div>
的单击,正如您在这个JSFiddle示例中看到的那样。
html:
<button onclick="buttonClick()" >Click</button>
<div id="test"></div>
js:
buttonClick = function (){
var editor = $("#test");
var div=$("<div>")
.mousedown(function () {
alert("!!!");
})
.appendTo(editor);
var selecttest = $("<select>")
.attr("disabled", "disabled")
.appendTo(div);
$("<option />").attr("value", '').appendTo(selecttest);
};
如果我使用以下代码而不是<select>
添加<input>
,它会起作用:
var textinput = $("<input>")
.attr("type", "text")
.attr("disabled", "disabled")
.appendTo(div);
针对不同浏览器的测试:对于IE11:对于input
和select
都有效。
对于Firefox:对于input
和select
,它都不起作用。
对于Opera和Chrome:对于input
有效,对于select
无效。
这里也有同样的问题,我在select上面放了一个带有透明背景的div。我知道这不是一个完美的解决方案,但我为我工作。
var notAvailablePopup = function (){
alert( "not available : work on select" );
}
.invisible_div {
width: 68%;
height: 33px;
background: rgba(255,0,0,0);
margin-top: -33px;
z-index:1;
position:absolute
}
.language {
z-index: 0;
}
<div onclick ="notAvailablePopup()" class="row language" >
<select disabled="disabled" class="form-control select-elem" >
<option value="">Translate this video</option> </select>
<div class="invisible_div">
</div>
</div>
mousedown事件不会在禁用的输入或选择元素上触发,也不会在禁用元素上触发任何鼠标事件。这是你的例子,它添加了input和select元素,试着点击它们,它不会触发警报。我把div的背景颜色做成了红色,这样你就可以看到它在哪里,所以如果你只点击红色部分,它就会启动。
因此,您关于mousedown事件是在禁用的输入字段上触发的,而不是在禁用的选择上触发的声明是错误的:)
var buttonClick = function() {
var editor = $("#test");
var div = $("<div>")
.mousedown(function() {
alert("!!!");
})
.appendTo(editor);
var textinput = $("<input>")
.attr("type", "text")
.attr("disabled", "disabled")
.appendTo(div);
var selecttest = $("<select>")
.attr("disabled", "disabled")
.appendTo(div);
$("<option />").attr("value", '').appendTo(selecttest);
};
select {
width: 200px;
}
button {
width: 70px;
height: 21px;
}
#test div {
background: red;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.1/jquery.min.js"></script>
<button onclick="buttonClick()">Click</button>
<div id="test"></div>
这是禁用的预期行为,您可能想禁用<options>
?
我战斗有点晚了,
博扬·佩特科夫斯基帮了很多忙,但他直接回答道:http://jsfiddle.net/jea1mtz6/
刚刚在您的CSS中添加了子元素";选择":pointer-events: none;
元素永远不是指针事件的目标。但事件可能会针对其后代元素。
其他答案不适用于所有浏览器(z-index)或"z";欺骗;使用半破解(只读)。在Chrome和firefox 上测试
禁用的元素不监听点击事件,这是禁用元素的行为。具有只读属性的元素侦听单击事件。
此外,您的代码有一个错误。
我更正了你代码中的错误。由于选择被禁用,您的问题中提到的场景将不会响应单击事件。如果你将取消粘贴改为只读,那么它就会起作用。
buttonClick = function (){
var editor = $("#test");
var div=$("<div>")
.mousedown(function () {
alert("!!!");
})
.appendTo(editor);
var selecttest = $("<select>")
.attr("readonly", "true")
.appendTo(div);
$("<option />").attr("value", '').appendTo(selecttest);
};
看看这把小提琴-http://jsfiddle.net/Ashish_developer/5d4qewps/1/
- JsFiddle上的鼠标事件不起作用
- node-webkit-从父窗口捕获iframe鼠标事件
- 鼠标事件在OpenLaszlo应用程序中不起作用
- 为画布绘图添加鼠标事件
- 如何在元素中处理鼠标事件,但不能在其子元素上处理
- KineticJS鼠标事件问题
- GWT-允许鼠标事件在两个叠加画布之间传播
- 为什么不是't html<对象>元素响应鼠标事件
- 如何恢复Kinetic.js鼠标事件
- 鼠标事件's在CtrlKey不起作用的情况下单击
- 鼠标事件,我的代码出了什么问题
- 撤消javascript中的所有鼠标事件处理程序
- JQuery facebook订阅插件鼠标事件
- Javascript/jQuery-鼠标事件没有在html上触发,添加了动态
- React模板鼠标事件在容器's鼠标事件
- 使用两个重叠的画布,我可以将鼠标事件传递到底部的画布吗
- 谷歌地图 api v3 搜索多边形没有鼠标事件
- CSS 溢出边界半径鼠标事件
- 将触摸事件转换为鼠标事件仅每秒有效一次
- D3.js鼠标事件不起作用