我知道有一些几乎相同的问题帖子,但所有提到的“修复”对我都不起作用。
首先,这是我需要的: 我的应用程序中的一些表格必须通过激活编辑模式来启用。如果编辑模式处于活动状态,则页面上的每个按钮(除保存和放弃之外)和链接都不应执行其正常功能,而应该显示一个消息,告诉您必须结束编辑模式。
我的脚本: 开始编辑模式的按钮调用此函数:
停止编辑模式有一种方法可以撤销所有更改。使用的处理程序“editModeOnClickHandler”仅显示消息并返回false;对我的问题不重要。
所以...在Firefox和IE8(还有Chrome)中一切正常,但在IE7中不行。根据我在其他帖子中阅读的内容,通过.attr在IE7中简单地未修改onClick。
无处不在的解决方案: 使用事件绑定而不是操作属性。我希望我能用那个!
这是我不能的原因: 我尝试取消绑定所有处理程序并绑定自己的处理程序,如上面的代码所示。但这并不能防止调用内联onclick。 好吧,你可能会想,不要使用内联调用..但我的项目是使用Primefaces编写的JSF,并且大部分代码都是动态生成的。总之,我没有可能防止内联onclick。
现在我卡住了。 我必须处理内联onclick,但只能通过在前面插入“return false;”来防止调用它们,但这似乎在IE7中不可能。
有人知道IE7的解决方法,以便能够操作onclick属性吗?再次强调:我不能使用.bind('click'...或.click(,因为它们无法停止原始内联onclick。
感谢所有答案! Alex
编辑 在您的帮助下,我发现在IE7中使用this.onclick = ..可以更改内联onclick。这个问题的正确处理已经在这个问题中回答:如何动态更改onClick处理程序? 对于我在这里的具体问题,我找不到合适的解决方案,因为我无法在破坏它们的情况下操纵原始内联onclick值。因此,我更改了我的脚本,以便IE7禁用所有按钮和链接,以确保它们不再可点击。为了确保不启用太多,我还会添加一个类名。
禁用所有尚未禁用的(在循环中调用):
也许这能帮助其他人。
首先,这是我需要的: 我的应用程序中的一些表格必须通过激活编辑模式来启用。如果编辑模式处于活动状态,则页面上的每个按钮(除保存和放弃之外)和链接都不应执行其正常功能,而应该显示一个消息,告诉您必须结束编辑模式。
我的脚本: 开始编辑模式的按钮调用此函数:
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;对我的问题不重要。
所以...在Firefox和IE8(还有Chrome)中一切正常,但在IE7中不行。根据我在其他帖子中阅读的内容,通过.attr在IE7中简单地未修改onClick。
无处不在的解决方案: 使用事件绑定而不是操作属性。我希望我能用那个!
这是我不能的原因: 我尝试取消绑定所有处理程序并绑定自己的处理程序,如上面的代码所示。但这并不能防止调用内联onclick。 好吧,你可能会想,不要使用内联调用..但我的项目是使用Primefaces编写的JSF,并且大部分代码都是动态生成的。总之,我没有可能防止内联onclick。
现在我卡住了。 我必须处理内联onclick,但只能通过在前面插入“return false;”来防止调用它们,但这似乎在IE7中不可能。
有人知道IE7的解决方法,以便能够操作onclick属性吗?再次强调:我不能使用.bind('click'...或.click(,因为它们无法停止原始内联onclick。
感谢所有答案! Alex
编辑 在您的帮助下,我发现在IE7中使用this.onclick = ..可以更改内联onclick。这个问题的正确处理已经在这个问题中回答:如何动态更改onClick处理程序? 对于我在这里的具体问题,我找不到合适的解决方案,因为我无法在破坏它们的情况下操纵原始内联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');
}
也许这能帮助其他人。
var clickEvents = $(element).data("events").click; $.each(clickEvents, function(key, handlerObj) { .. }
- Robert de W