1

我有一个 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>

<script type="text/javascript">
    /*global $*/
    $(function () {
        "use strict";
        $("#voucher1").click(function (e) {
            e.stopPropagation();
        });
        $("#voucher2").click(function (e) {
            e.stopPropagation();
        });
    });
</script>

voucher1并且voucher2是控件上的简单<a id="voucher1" href="blahblah">blah</a>标签。我(或浏览器,或两者)做错了什么?

4

3 回答 3

0

需要阻止锚点的默认操作并确保页面已完全加载:

<script type="text/javascript">
    $(document).ready(function(){
        $("#voucher1").click(function(e) {
            e.preventDefault();
            e.stopPropagation();
        });
        $("#voucher2").click(function (e) {
            e.preventDefault();
            e.stopPropagation();
        });
    });
</script>
于 2013-07-08T20:12:45.070 回答
0

您包含的 div 中有多少个元素?这是另一种方法,而不是将“取消弹出”逻辑保留在链接上,而是将其放在 div 本身上。

$("your div").delegate("*:not(a)", "click", function () { 
    alert("your popup"); 
});

此方法的优点是,如果您将<a>标签动态添加到“您的 div”,那么由于事件处理程序附加在“您的 div”上,所有新的子项仍然连接到事件(或者在您的情况下,没有连接到事件)。

完整示例:

最好仅在 DOM 准备好后添加所有 jquery 事件处理程序。幸运的是,jquery 使这对您来说非常容易,如下所示:

<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>
于 2013-07-08T20:34:55.670 回答
0

找到了不起作用的原因。我的公司在其中呈现此页面的框架将一个 .aspx 动态加载到另一个 .aspx 中(哟,这里适用 dawg 笑话)并且它阻止我的 JavaScript 在页面初始化时注册,因为子页面从未真正初始化。我找到了一个全局 JS,它可以让我在加载子页面时访问它,我在那里弹出我的东西,它在任何地方都可以使用。感谢您的建议。

于 2013-07-08T23:19:23.870 回答