由于许多浏览器没有在禁用的表单元素上显示工具提示(就像Opera一样),我决定使用jQuery模拟禁用按钮。
禁用时我只是将控件的类设置为禁用,而对于按钮/提交控件,我添加了一个事件处理程序click(function(){return false;})
我可以在重新启用控件后解除绑定。
现在的问题是 - 我需要从禁用的控件中删除所有附加的事件处理程序(click, enter key)
,除了'mouseenter'和'mouseleave',因为我使用的是基于自定义jQuery的工具提示,需要这些事件。
重新启用按钮后,我需要恢复所有处理程序。
我知道我可以在$.data()
中存储附加的事件处理程序,但我不知道如何收集除'mouseenter'和'mouseleave'之外的所有事件处理程序。
你能帮助我吗?
答案 0 :(得分:2)
试试这个:
<script>
$(function() {
//Lets attach 2 event handlers to the div
$("#el").click(function(){ alert("click"); });
$("#el").mouseover(function(){ alert("mouseover"); });
//We iterate on the div node and find the events attached to it
$.each($("#el").data("events"), function(i, event) {
output(i);
$.each(event, function(j, h) {
output(h.handler);
//DO your unbind here if its not a mouse-enter or a mouseleave
});
});
});
function output(text) {
$("#output").html(function(i, h) {
return h + text + "<br />";
});
}
</script>
<div id="el" style="width: 200px; height: 200px; border: solid 1px red;">Test</div>
<span id="output"></output>
答案 1 :(得分:1)
答案 2 :(得分:1)
我不会全力以赴。
由于你在禁用的元素上有一个.disabled
类,我只是通过在if()
语句中测试该类来使用它作为禁用/启用该功能的标志,并返回false如果元素具有disabled
类。
因此使用您提供的click
处理程序,而不是:
$('someElement').click(function(){return false;});
我会这样做:
$('someElement').click(function() {
if( $(this).hasClass( 'disabled' ) ) {
return false;
} else {
// run your code
}
});
现在,当您删除.disabled
类时,输入将再次起作用。没有unbind/bind
或使用.data()
进行跟踪。更简单。