繁体   English   中英

在IE6和IE7中Javascript“确认”

[英]Javascript “confirm” in IE6 and IE7

为什么这段代码在IE6或IE7中不起作用?

$('a').click(
    function()
    {
        var urlIsExternal = true;

        var urlMedicareDir = '/medicare/';
        var urlMedicareHost = 'health.healthcare.com';
        var urlMedicare = 'https://' + urlMedicareHost + urlMedicareDir;

        var urlAppsHost = 'apps.healthcare.com';

        var urlCurrent = String( window.location );
        var urlCurrentPrefix = urlCurrent.substring( 0, urlMedicare.length );
        var urlCurrentURL = $.url( urlCurrent );

        var urlClicked = $(this).attr('href');
        var urlClickedURL = $.url( $(this).attr('href') );

        var urlHost = urlClickedURL.attr('host');

        if( !urlHost.length )
        {
            urlHost = urlCurrentURL.attr('host');
        }

        var urlConfirmMessage = 'You are now leaving the Medicare website.';

        if( urlCurrentPrefix == urlMedicare )
        {
            if( urlClicked.substring( 0, 1 ) == '/' ) // starts with slash
            {
                if( urlClicked.substring( 0, urlMedicareDir.length ) == urlMedicareDir )
                {
                    urlIsExternal = false;
                }
            }

            if( urlClicked.substring( 0, urlMedicare.length ) == urlMedicare )
            {
                urlIsExternal = false;
            }

            if (
                urlClicked.substring( 0, 1 ) != '/' &&
                urlClicked.substring( 0, 4 ) != 'http' &&
                urlClicked.substring( 0, 4 ) != 'file'
            )
            {
                urlIsExternal = false;
            }

            if( urlAppsHost == urlHost )
            {
                urlIsExternal = false;
            }

            if( urlClicked.substring(urlClicked.length-4) == '.pdf' )
            {
                urlIsExternal = false;
            }
        }
        else
        {
            urlIsExternal = false;
        }

        if( urlIsExternal )
        {
            if( confirm( urlConfirmMessage ) )
            {
                window.open( urlClicked );
                return false;
            }
            else
            {
                return false;
            }
        }
        else
        {
            return true;
        }
    }
);

出于某种原因,在IE6或IE7中单击链接时,它们不会将用户定向到链接,也不会提示确认对话框。 它应该提示确认对话框,但由于某种原因,它不是。

我认为你没有阻止锚的默认动作(“a”)。

你应该开始$('a').click( function( event ) {当你到达这里时:

if( urlIsExternal ) {

   // This tells jQuery to NOT follow the hyperlink
   event.preventDefault(); 

   if( confirm( urlConfirmMessage ) ) {
      window.open( urlClicked );  
   }

}

但是,真正缺少的是此代码需要在文档加载运行。 所以你只需要用你的函数包装

$(document).ready(function(){
   $('a').click( function( event ) {
      /* your code */
   }
});

如果没有调用$(document).ready() ,JavaScript就会在呈现文档正文之前运行,因此它找不到任何可以附加click事件的<a>标记。

似乎如果用户点击具有以当前主机以外的某个值开头的href的链接,则需要提供确认对话框。 这是一个真正令人烦恼的策略,为什么用户点击链接之前不知道它会把它们带到别处呢?

无论如何,你想要做的简单版本是:

function showPrompt() {
  return confirm('Do you really want to leaving ' + window.location.host +
                 '?\nPress OK to continue or Cancel to stay on this page.');
}

window.onload = function() {

  // The links collection is live and available as a property of window
  var link, links = document.links;

  // Include criteria for host, hostName, protocol, whatever as required
  var re = new RegExp(window.location.host || 'no host');

  for (var i=0, iLen=links.length; i<iLen; i++) {
    link = links[i];

    // Only add the listener to links that need it
    if (!re.test(link.href)) {

      // Add the listener however you want, this way is simple and robust
      link.onclick = showPrompt;
    }
  }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM