2010-10-18 44 views
0

正确的URL,我有一个简单的小形式在IE7打开新窗口中打开同一个目标的基础窗口,但显示了Firefox

<form id="loginform"> <input id="myinput" type="text" /> <input name="submit" value="go" type="submit" /></form> 
在一个很不安全的方式

我希望它去根据不同的URL输入值。

这里是我简单的小jQuery脚本,我肯定可以写得更简洁。 (随时帮助)

$(document).ready(function() { 
jQuery.noConflict(); 
var apple = 'http://www.apple.com'; 
var microsoft = 'http://www.microsoft.com'; 

    jQuery('#loginform').submit(function() { 
    var pass = jQuery('#myinput').val(); 

if (pass=='apple') { 
var currentloc=apple; 
} else if (pass=='microsoft') { 
var currentloc=microsoft; 
} 
else { 
var currentloc ='http://www.mysite.com/sorry'; 
} 
     window.open(currentloc, 'formpopup', 'width=800,height=600,resizeable=1,scrollbars=1'); 
    }); 
}); 

这作品时,我对ffcurrent Macintosh上运行它,而不是当我在IE7中运行它。那么弹出窗口与我们来自的窗口相同。

回答

1

我认为主要的问题是你宣布currentloc作为一个局部变量三次。

在JavaScript它的全部范围,并在每次宣布currentloc用关键字时间var你基本上说,“我希望此变量在此,如果(或者如果)语句,不存在外面。 “稍后当您使用window.open并且您通过currentloc时,您实际上正在实例化一个新的全局变量,因为currentloc的所有其他实例都已丢失。当你不用var声明它们时,会自动创建全局变量(我认为它们是全局对象的全局属性,但我并不是100%)。无论如何,将显式声明变量并将其限制为应用程序所需的最小范围被认为是最佳实践。

这是您的修改代码。我希望它的工作原理(测试IE8怪癖模式,和Firefox)

<html> 
<head> 
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.3/jquery.min.js" ></script> 
    <script> 
    $(document).ready(function() { 
     jQuery.noConflict(); 
     var apple = 'http://www.apple.com'; 
     var microsoft = 'http://www.microsoft.com'; 
     var currentloc; 

     jQuery('#loginform').submit(function() 
     { 
      var pass = jQuery('#myinput').val(); 

      if (pass=='apple') 
      { 
       currentloc=apple; 
      } 
      else if (pass=='microsoft') 
      { 
       currentloc=microsoft; 
      } 
      else 
      { 
       currentloc ='http://www.mysite.com/sorry'; 
      } 
      window.open(currentloc, 'formpopup', 'width=800,height=600,resizeable=1,scrollbars=1'); 
     }); 
    }); 
    </script> 
</head> 
<body> 
    <form id="loginform"> 
     <input id="myinput" type="text" /> 
     <input name="submit" value="go" type="submit" /> 
    </form> 
</body> 
</html> 
+0

感谢详尽的解释,我总是得到一点与全球本地的东西失去了... – liz 2010-10-20 14:48:39