在ie7中打开新窗口打开相同的目标作为基本窗口,但在Firefox中显示正确的URL

时间:2010-10-18 23:16:27

标签: javascript jquery

我有一个简单的小形式

<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 个答案:

答案 0 :(得分:1)

我认为主要问题是您将currentloc声明为局部变量三次。

在JavaScript中,它都是关于范围的,每次你用关键字currentloc声明var时,你基本上都说“我希望这个变量存在于此范围内(或者if)声明而不是在它之外。“稍后当您使用window.open并传入currentloc时,您实际上是在实例化一个新的全局变量,因为currentloc的所有其他实例都已丢失。

当您不使用var声明全局变量时,会自动创建全局变量(我认为从技术上讲,它们是全局对象的全局属性,但我不是100%)。在任何情况下,最佳做法是明确声明变量并将其限制在应用程序所需的最小范围内。

这是您修改后的代码。我希望它有效(测试IE8 quirks模式和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>