Javascript stopPropagation在Firefox中工作,但在IE或Chrome中不工作
我有一个ASP.NET用户控件(ascx),它有一个Javascript stopPropagation在Firefox中工作,但在IE或Chrome中不工作,javascript,jquery,asp.net,Javascript,Jquery,Asp.net,我有一个ASP.NET用户控件(ascx),它有一个div,它的onclick打开一个弹出窗口。我的任务是在这个div中放置一个超链接,然后转到其他地方而不是打开弹出窗口。我最初的问题是超链接到了其他地方,但它仍然打开了弹出窗口。研究让我想到了stopPropagation()。然而,虽然它似乎在Firefox中工作,但在IE或Chrome中却不起作用更重要的是,事件本身似乎没有连接起来。我在ASCX上尝试了以下方法: <script type="text/javascript">
div
,它的onclick
打开一个弹出窗口。我的任务是在这个div
中放置一个超链接,然后转到其他地方而不是打开弹出窗口。我最初的问题是超链接到了其他地方,但它仍然打开了弹出窗口。研究让我想到了stopPropagation()
。然而,虽然它似乎在Firefox中工作,但在IE或Chrome中却不起作用更重要的是,事件本身似乎没有连接起来。我在ASCX上尝试了以下方法:
<script type="text/javascript">
/*global $*/
$("#voucher1").click(function(e) {
"use strict";
e.stopPropagation();
});
$("#voucher2").click(function (e) {
"use strict";
e.stopPropagation();
});
</script>
/*全球的$*/
$(“#凭证1”)。单击(功能(e){
“严格使用”;
e、 停止传播();
});
$(“#凭证2”)。单击(功能(e){
“严格使用”;
e、 停止传播();
});
及
/*全球的$*/
$(函数(){
“严格使用”;
$(“#凭证1”)。单击(功能(e){
e、 停止传播();
});
$(“#凭证2”)。单击(功能(e){
e、 停止传播();
});
});
voucher1
和voucher2
是控件上简单的
标记。我(或浏览器,或两者)做错了什么?需要防止锚定的默认操作,并确保页面已完全加载:
<script type="text/javascript">
$(document).ready(function(){
$("#voucher1").click(function(e) {
e.preventDefault();
e.stopPropagation();
});
$("#voucher2").click(function (e) {
e.preventDefault();
e.stopPropagation();
});
});
</script>
$(文档).ready(函数(){
$(“#凭证1”)。单击(功能(e){
e、 预防默认值();
e、 停止传播();
});
$(“#凭证2”)。单击(功能(e){
e、 预防默认值();
e、 停止传播();
});
});
包含的div中有多少个元素?这里是另一种方法,它不是保持链接上的“取消弹出”逻辑,而是将其放在div本身上
$("your div").delegate("*:not(a)", "click", function () {
alert("your popup");
});
此方法的优点是,如果动态添加
找到了它不起作用的原因。我的公司呈现这个页面的框架动态地将一个.aspx加载到另一个.aspx中(这里是yo,dawg),它阻止我的JavaScript在页面初始化时注册,因为子页面从未真正初始化过。我找到了一个全局JS,它让我在加载子页面时可以访问子页面,我在那里打开了我的东西,它在任何地方都能工作。感谢您的建议。您应该同时使用e.preventDefault
和e.stopPropagation
,除非您希望停止向其祖先冒泡事件。否则只需使用return false
使用“use strict”的目的是什么;这里?我真的看不到“严格使用”的必要条件代码>在这里,反正不是这样@JSLint建议的“烘焙和阅读更多”真的没有其他价值。更大的问题在于我问题中的一句话“似乎事件本身没有连接起来”。我可以发出警报('boo!')代码>在连线之后,IE和Chrome中没有出现。更大的问题在于我问题中的一句话“似乎事件本身没有连线”。我可以发出警报('boo!')代码>在连线之后,它在IE和Chrome中没有被点击。根据我的其他评论,这个放在哪里?似乎任何初始化脚本都会被IE和Chrome抛弃,但不会被Firefox抛弃。
$("your div").delegate("*:not(a)", "click", function () {
alert("your popup");
});
<html>
<head>
<script src="your jquery"></script>
<script>
$(document).ready(function() {
$("#yourdiv").delegate("*:not(a)", "click", function () {
alert("your popup");
});
});
</script>
</head>
<body>
<div id="yourdiv">
<span>here but</span>
<a href="#somewhere">not here</a>
</div>
</body>
</html>