4

我正在使用 jQuery。我有一个禁用的文本区域:<textarea id="textarea" disabled="disabled"></textarea>。我想这样当用户点击文本区域时,它会做一些事情,比如一个警告框。所以,我有$('#textarea').click(function() { alert('Test'); });

但是,这仅在 textarea 未禁用时才有效。那么,即使在 textarea 被禁用的情况下,我怎样才能触发 click 事件呢?

4

5 回答 5

10

而不是disabled="disabled"为什么不使用readonly,readyonly 与 disabled 几乎相同,并且 click 事件将起作用

于 2012-07-29T18:23:13.607 回答
5

除了禁用它,您可以尝试使用 CSS 模拟禁用的行为并继续从它接收鼠标事件。

或者在禁用输入上查看此答案事件, 其中Andy E显示了如何在输入顶部放置一个不可见元素(覆盖),以便在禁用输入时接收这些鼠标事件。

他删除了覆盖并在单击时启用输入,但您可以将行为更改为您想要的任何内容。

于 2012-07-29T18:17:15.110 回答
2

禁用的元素不会触发鼠标事件。大多数浏览器会将源自禁用元素的事件沿 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');
});​

小提琴

于 2012-07-29T18:21:19.957 回答
1

禁用的元素不会触发点击事件。这是他们被禁用的一部分。

于 2012-07-29T18:18:23.580 回答
0

您不能从禁用的元素触发点击事件,但您可以设置值,例如:

http://jsfiddle.net/j6tdn/28/

于 2012-07-29T18:26:49.703 回答