我有一个简单的小形式
<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中运行它时。然后弹出窗口与我们来自的窗口相同。
答案 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>