Javascript Can';t get.click()在禁用的文本区域上工作
我正在使用jQuery。我有一个禁用的文本区域:Javascript Can';t get.click()在禁用的文本区域上工作,javascript,jquery,html,textarea,Javascript,Jquery,Html,Textarea,我正在使用jQuery。我有一个禁用的文本区域:。我希望这样,当用户点击文本区域时,它会做一些事情,比如一个警告框。因此,我有$('#textarea')。单击(function(){alert('Test');}) 但是,这仅在未禁用textarea时有效。因此,即使禁用了textarea,我如何使单击事件触发?您可以尝试使用CSS模拟禁用的行为,并继续从中接收鼠标事件,而不是禁用它 或者看看这个答案 其中,Andy E显示了当输入被禁用时,如何在输入顶部放置一个不可见的元素(覆盖)以接收这些
。我希望这样,当用户点击文本区域时,它会做一些事情,比如一个警告框。因此,我有$('#textarea')。单击(function(){alert('Test');})代码>
但是,这仅在未禁用textarea时有效。因此,即使禁用了textarea,我如何使单击事件触发?您可以尝试使用CSS模拟禁用的行为,并继续从中接收鼠标事件,而不是禁用它
或者看看这个答案
其中,Andy E
显示了当输入被禁用时,如何在输入顶部放置一个不可见的元素(覆盖)以接收这些鼠标事件
他删除覆盖并在单击时启用输入,但您可以将其行为更改为您想要的任何内容。禁用的元素不会触发单击事件。这是它们被禁用的一部分。禁用的元素不会触发鼠标事件。大多数浏览器都会将源于禁用元素的事件传播到DOM树上,因此事件处理程序可以放置在容器元素上。然而,Firefox并没有表现出这种行为,当你点击一个被禁用的元素时,它什么也不做
你可以这样做:
$(document).on('click', function(e) {
if (e.target.id === 'textarea') alert('works');
});
但它可能不是跨浏览器的
另一种可能更好的方法是将另一个元素放在禁用的元素上,并捕获该元素上的事件,类似于:
var t = $("#textarea"),
over = $('<div</div>');
over.css({
position: "absolute",
top: t.position().top,
left: t.position().left,
width: t.outerWidth(),
height: t.outerHeight(),
zIndex: 1000,
backgroundColor: "#fff",
opacity: 0
});
t.after(over);
$(over).on('click', function() {
alert('works');
});
var t=$(“#textarea”),
over=$(“为什么不使用readonly
,而不是disabled=“disabled”
,readonly与disabled几乎相同,单击事件将起作用您不能从禁用的元素触发单击事件,尽管您可以设置值e-g:
您可以在向上键时将文本设置为“”,而不是禁用1+的可能重复非常好且简单的解决方案。您需要在CSS中为t.CSS(“left”|“top”)的文本区域指定一个显式的top和left值,以便按预期工作。请尝试.offset()
或将left和top设置为0px,并将位置:relative
应用于文本区域的容器。@CharlieRudenstål-几乎任何事情都有解决方法,只是不想在上面花费更多时间。编辑我的答案,应该适用于所有浏览器,以及大多数样式等。啊,我无意贬低你的答案。Wa这比其他任何东西都更像是对OP的一个提示。事实上,我将对这个解决方案进行升级投票。没错,你甚至可以将只读文本区域设置为禁用的样式。+1