【发布时间】:2011-07-18 18:05:13
【问题描述】:
我知道,有几篇帖子几乎都有相同的问题,但所有提到的“修复”都对我不起作用。
但首先,这是我需要的: 我的应用程序中的某些表单必须通过激活编辑模式来启用。如果编辑模式处于活动状态,每个按钮(除了保存和中止)和页面上的链接不应该像通常那样做,但它应该给出一个消息,你必须改为结束编辑模式。
我的脚本: 启动编辑模式的按钮调用如下:
function startEditMode(selector) {
var disableAction = "return false;";
jQuery("mySelectors").each(function(){
jQuery(this).bind('click', editModeOnClickHandler);
var onClickValue = "";
var onClick = jQuery(this).attr("onClick");
if ( onClick !== undefined ) onClickValue = "" + onClick;
jQuery(this).attr("onClick", disableAction + onClickValue);
});
}
要停止编辑模式,有一种方法可以逆转所有这些。 使用的处理程序“editModeOnClickHandler”只是显示消息并返回false;对我的问题并不重要。
所以.. 在 FF 和 IE8(也在 Chrome)中一切正常,但在 IE7 中却不行。正如我在其他帖子中看到的那样,onClick 在 IE7 中根本没有通过 .attr 进行修改。
到处张贴的解决方案: 使用事件绑定而不是操作属性。我希望我可以使用它!
这就是我不能的原因: 如您在上面的代码中所见,我尝试取消绑定所有处理程序并绑定我自己的处理程序。但这并不妨碍调用内联 onclick。 好吧,你可能会想,不要使用内联调用。但我的项目是使用 Primefaces 用 JSF 编写的,并且它的大部分代码都是动态生成的。总而言之,我无法阻止内联点击。
现在我被困住了。 我必须处理只能通过插入“return false”来阻止调用的内联 onclick;在前面,但这似乎在 IE7 中是不可能的。
有谁知道 IE7 的解决方法可以操纵 onclick 属性?再说一遍:我不能使用 .bind('click'... 或 .click( 因为它们无法停止原始的内联 onclick。
感谢所有回答! 亚历克斯
编辑
在您的帮助下,我发现在 IE7 中更改内联 onclick 可以使用this.onclick = ..。对此问题的正确处理已在此问题中得到解答:How to change onClick handler dynamically?
对于我在这里的具体问题,我没有找到合适的解决方案,因为我无法在不破坏它们的情况下操作原始的内联 onclick 值。出于这个原因,我更改了我的脚本,因此 IE7 禁用了所有按钮和链接以确保它们不再可点击。可以肯定的是,不要启用太多,我也要添加一个类名。
禁用所有尚未禁用的(在循环中调用):
if (!jQuery(this).attr('disabled')) {
jQuery(this).attr('disabled', 'disabled');
jQuery(this).addClass('editmodedisabled');
}
启用我以前禁用的东西:
if (jQuery(this).hasClass('editmodedisabled')) {
jQuery(this).attr('disabled', '');
jQuery(this).removeClass('editmodedisabled');
}
也许这对其他人有帮助
【问题讨论】:
-
为什么 attr('onClick') 中的 C 大写?这也可能对您的情况有所帮助
var clickEvents = $(element).data("events").click; $.each(clickEvents, function(key, handlerObj) { .. } -
感谢您的评论: 1. 我将 C 大写,因为某些原因 IE8 不会删除我添加的返回 false;没有 C :( 2. 我也尝试过使用 data("events") 但内联 onclick 似乎不是其中的一部分。我会再试一次。
标签: jquery internet-explorer-7 onclick attr