Javascript stopPropagation在Firefox中工作,但在IE或Chrome中不工作

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">

我有一个ASP.NET用户控件(ascx),它有一个
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>