javascript - 子窗口打开时如何停止刷新父页面?

标签 javascript jquery html

当我单击链接打开子窗口时,父页面会自动刷新。我怎样才能阻止它?

打开子窗口时,父页面不应刷新。这该怎么做?请帮我。

我的代码如下所示:

<html>
<head>
<title>login</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

<script type="text/javascript">
var popup;
function ShowPopup(url) {
if(popup)
    {
     popup.close();
     }
    popup = window.open(url, "self", "toolbar=no,scrollbars=yes,location=no,statusbar=no,menubar=no,resizable=0,width=300,height=350,left = 0,top = 0");
        popup.focus();
 }
</script>

</head>

<body>
<a href="" onclick="ShowPopup('popup_login.asp')" style="color: #1686CC;">Sign In / Register</a>
</body>
</html>

最佳答案

您的页面刷新是因为不仅调用了您的函数,还调用了
执行a标记指示的超链接。所以你发生了两件事
同时:

  • ,超链接本身会导航到href属性中的任何内容,
    即使它是空的。如果href为空,则表示:重新加载此页面。
  • onclick事件处理程序也可以执行某些操作(打开弹出窗口),但是
    当前不会取消第一个效果。

  • 在第一个反应中,可能只是删除有问题的href属性。这解决了问题,但又引入了另一个问题:您失去了所有的好处
    显示的超链接文本的样式(例如下划线,颜色,更改光标,跳位顺序等),
    通常这不是您想要的。

    这里有一些更方便的解决方案:

    onclick事件处理程序返回false

    返回false将取消 anchor 的默认行为,并且href属性的内容将被忽略:
    onclick="ShowPopup('popup_login.asp'); return false;" 
    

    如果您关心的是不支持javascript(或禁用了javascript)的浏览器,请放url属性中有意义的后备href,例如:
    href="javascript_is_required.html"
    

    使用event.preventDefault

    这是return false的替代方法。它的优点是您可以做到
    作为第一条指令执行,以便在其他代码中发生运行时错误时
    它已经完成了它的工作:
    onclick="event.preventDefault();ShowPopup('popup_login.asp');"
    

    请注意,此event对象是所有浏览器在事件属性的上下文中定义的,
    并与window.event对象区分开来,后者不受支持
    所有浏览器。

    href中使用哈希符号

    给 anchor 一个名字
    然后在href属性中引用该名称。这条路
    anchor 将自己导航到 View 中
    它通常已经是用户单击它的时间:
    name="loginlink" href="#loginlink" 
    

    您通常会看到较短的变体href="#",但这会将页面滚动到顶部
    单击时,如果您确定该页面未向下滚动,则可能会确定。
    尽管如此,使用“#”还是有副作用的:点击url会发生变化,
    以前的url放在浏览器的历史记录堆栈中。因此,如果在点击链接后按返回按钮,
    您留在页面上。这可能是不希望的。

    使用javascript:协议(protocol)不执行任何操作
    href="javascript:" 
    

    这将使超链接在冒号之后执行任何JavaScript,并且从那里开始
    没有那里,什么都不会发生。浏览器历史记录未修改。有变化
    此方法,例如javascript: return false;javascript: void(0);
    使用javascript:协议(protocol)处理click事件

    使用此解决方案,您不再使用onclick属性。相反,您移动代码
    href属性:
    href="javascript: ShowPopup('popup_login.asp');"
    

    布局和代码的分离

    原始代码和所有上述解决方案仍然存在许多开发人员遇到的问题
    不喜欢:HTMLjavascript代码混合在一起。最好将两者分开。

    可以按照以下步骤进行:
    <a href="javascript_is_required.html" id="loginLink"
       title="Click here to log on"> ... </a>
    ...
    <script>
        document.getElementById('mylink').onclick = function(e) {
            e = e || event; // cross-browser way to get event object
            e.preventDefault(); // cancel the default click behaviour
            ShowPopup('popup_login.asp'); // your custom code comes here
            return false; // cancel the default click behaviour
        };
    </script>
    

    一些人也会这样说
    有一个缺点:很难识别单击后执行的代码。
    上面的代码会将事件处理程序附加到mylink的click事件
    元件。确保仅在文档加载后执行它。
    事件处理程序取消默认点击
    行为有两种方式。选择您喜欢的一个,或者根据需要选择两个。照原样
    取消后,将永远不会执行对href属性值的导航。首先
    该行涉及浏览器的详细信息,因为较旧的IE浏览器未传递事件对象
    作为事件处理程序的参数,但是公开一个全局event对象。

    如果您不必支持IE9之前的浏览器,则可以使用
    addEventListener('click', myfunction);代替onclick = myfunction;以上代码。这具有许多优点:可以将更多事件处理程序附加到同一事件处理程序。
    事件,您也可以一一删除它们。 jQuery提供良好的跨浏览器支持
    为此,使用.on()

    上述解决方案有几种变体,它们都有
    好处和缺点。您甚至可以放弃使用 anchor 来实现此目的
    并改用添加样式的其他元素。

    关于javascript - 子窗口打开时如何停止刷新父页面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33460296/

    相关文章:

    html - 除最后一行外,将元素均匀分布在一行中

    javascript - 在 jQuery 函数中多次调用 ColdFusion.Ajax.submitform()

    php - 将位置变量从 Javascript 传递到 PHP 函数

    javascript - EXTJS 5 - 如何禁用菜单中的某些项目

    jquery - 当 jquery 元素不存在时保持空白?

    html - 为什么垂直对齐在此特定示例中不起作用

    javascript - 无法让 jasmine.any(Function) 工作

    javascript - .show ('slide' 期间的 jQuery 动画高度)

    jquery - 使用 Jquery.text() 时 <p> 标签内的换行符

    jquery - 调整大小时图像 map /区域坐标更新