锚定“javascript:void(0)”导致window.onbeforeunload在IE上触发
Anchor "javascript:void(0)" causing window.onbeforeunload to fire on IE
我正在使用一个名为 Chosen 的下拉小部件,它有一个带有 href javascript:void(0)
的锚点。当我单击下拉菜单时,它可以工作,但在 IE 上它会触发一个新的 onbeforeunload
事件,这令人沮丧,因为应用程序会确认您是否要离开。显然,您不希望在输入表单数据时遇到这些问题。
有没有办法在不改变所选库的情况下摆脱这个问题?
不幸的是:
window.onbeforeunload = function (e) {
console.log(window.location);
};
也不登录javascript:void(0)
,所以,我不能用它来检查目标URL。
这种行为至少发生在IE9中,这就是我所关心的(不是较旧的IE)。
我能看到的唯一解决方案是将false
的返回添加到链接的onclick
事件处理程序中。它会告诉IE你不打算通过单击链接来更改页面。
<a href="javascript:void(0);" onclick="doSomething(); return false;">Link</a>
同样可以这样写:
<script>
function doSomething() {
// do Something
return false;
}
</script>
<a href="javascript:void(0);" onclick="return doSomething();">Link</a>
我最终听取了针对锚点的单击事件并取消了该事件以防止触发onBeforeUnload
:
$chosen.find('.chzn-single').click(function() {
return false;
});
这已经很老了...但是我最近在工作中遇到了这个问题。不幸的是,我们仍然被迫支持IE9。我们正在这个项目上使用 Angular.js 当用户单击带有data-ng-click
的锚标签时,它将动态地将新内容加载到页面上。
在您的示例中,您所要做的就是传递事件并在函数中阻止默认操作并阻止它冒泡。为此,您所要做的就是:
// Inside the HTML
{...}
<a href="javascript:void(0);" onclick="doSomething(evt);">Link</a>
{...}
<script>
function doSomething(evt) {
evt.preventDefault();
evt.stopPropagation();
// Do Something
};
</script>
{...}
在Angular中,我所做的只是以下内容:
// Inside the View
<a href="javascript:void(0)" data-ng-click="addStuff($event)">Add Stuff</a>
// Inside the controller
function addStuff($event) {
$event.preventDefault();
$event.stopPropagation();
// Do Something
};
我希望这还不算太晚,我希望它能帮助其他人。
有同样的问题。刚刚找到你的问题。我的解决方案是,您需要将onclick属性添加到每个选定的下拉列表锚标记并调用window.onbeforeunload = null
就我而言,我已经把
$(".chzn-single").attr("onclick", "window.onbeforeunload = null;");
设置所选库后,它工作正常
为此使用 href。 一个简单的解决方案,只需最少的额外工作:
我更喜欢使用模拟 href 的 CSS 类,显然你会改变这个类的颜色和样式以适应你的网站,但为此目的,它是标准的蓝色下划线链接
<style>
.linkSimulate
{
cursor: pointer;
COLOR: blue;
text-decoration: underline;
}
</style>
然后使用简单的锚点
<a onclick = "do_save();" class ="linkSimulate">Link</a>
即使这个问题很旧,我也增强了@Bartosz的答案,在 @Oiva Eskola 的评论中修复了这个问题:
这不会阻止 window.onbeforeunload 在单击选定的链接元素后工作吗? – var thisOnClick;
以下是我正确创建 HTML onclick
属性的解决方案,不会覆盖或取消事件:
var thisOnClick;
$.each( $(' .container a '), function(){
thisOnClick = $(this).attr('onclick');
if ( typeof thisOnClick == 'undefined' ) {
$(this).attr('onclick', 'window.onbeforeunload = null;');
} else if ( typeof thisOnClick == 'string' && thisOnClick.indexOf('window.onbeforeunload') == -1 ) {
$(this).attr('onclick', thisOnClick + 'window.onbeforeunload = null;');
}
});
- onbeforeunload和asp:Safari和FireFox中的更新面板
- 从window.onbeforeunload调用方法背后的代码
- 如何显示window.onbeforeunload警报的引导模式
- onbeforeunload未正确触发
- onbeforeunload事件在我的代码中没有触发,但其他示例可以工作
- confirm() on window.onbeforeunload
- JavaScript onbeforeunload()函数未提交表单
- 检查onbeforeunload中的ace编辑器,查看是否进行了更改
- Mysql and onbeforeunload
- 如何在提示下获取和使用从window.onbeforeunload事件的返回语句显示的值
- 如果我在 window.onbeforeunload 事件上确认是,我如何调用另一个 Java 脚本函数
- window.onbeforeunload在IE8中不触发(在Firefox,Chrome和Safari中工作正常)
- onbeforeunload导航使用location.href
- 使用onbeforeunload绑定事件
- 如何禁用“警告”;onbeforeunload”;当“;重新加载”;同一页
- onbeforeunload确认对话框可以用设计良好的自定义对话框进行自定义
- 如何对onbeforeunload中的子事件作出反应
- Onbeforeunload-windows分配不'不适用于Chrome
- PHP-window.onbeforeunload和自动注销冲突
- 使用apachewicket的onbeforeunload事件