Javascript Can';t get.click()在禁用的文本区域上工作

Javascript Can';t get.click()在禁用的文本区域上工作,javascript,jquery,html,textarea,Javascript,Jquery,Html,Textarea,我正在使用jQuery。我有一个禁用的文本区域:。我希望这样,当用户点击文本区域时,它会做一些事情,比如一个警告框。因此,我有$('#textarea')。单击(function(){alert('Test');}) 但是,这仅在未禁用textarea时有效。因此,即使禁用了textarea,我如何使单击事件触发?您可以尝试使用CSS模拟禁用的行为,并继续从中接收鼠标事件,而不是禁用它 或者看看这个答案 其中,Andy E显示了当输入被禁用时,如何在输入顶部放置一个不可见的元素(覆盖)以接收这些

我正在使用jQuery。我有一个禁用的文本区域:
。我希望这样,当用户点击文本区域时,它会做一些事情,比如一个警告框。因此,我有
$('#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