2010-04-23 34 views
1

一位朋友向我指出了他的旧网站,并说“提交表单刚刚停止工作,我确信这很简单。”什么打破在这个JavaScript 1.2代码片段?

表单要求孩子查看书中的某个单词,并根据答案,将孩子重定向到成功页面或失败页面。它使用JavaScript 1.2,大约2001年

你可以看到这种形式在行动在:

http://www.secrethidingplaces.com/login1.html

任何想法,为什么它的失败?

的HTML做到这一点:

<script src="password.js" type="text/javascript" language="JavaScript1.2"> 
</script> 

<script type="text/javascript" language="JavaScript1.2"> 
<!-- 

function showRightPage() 
{ 
return window.location.href = "extra.html" ; 
} 

function showWrongPage() 
{ 
return window.location.href = "sorry2.html" ; 
} 

//--> 
</script> 

,然后这样的:

document.write ('<form name="questionForm" action="javascript:checkAnswer()" method="post">') ; 
... 
document.write ('<input type="text" name="userAnswer" value="" size="90">') ; 
document.write ('<INPUT TYPE="image" NAME="submit" SRC="stock/btn_send.gif" width="121" height="41" BORDER="0" ALT="submit">') ; 
document.write ('\</p>') ; 
document.write ('\</form>') ; 

我假设有一个从./password.js丑陋的东西在CheckAnswer。我可以破解的形式绕过JavaScript和直行到成功页面:

document.write ('<form name="questionForm" action="extra.html" method="post">') ; 


,但我想帮助我的朋友让他的孩子们现场再次合作。 CheckAnswer功能如下。这里有什么问题吗?

function checkAnswer() 
{ 
currentAnswer = answersArray [ choiceNumber ] ; 

if (agt.indexOf("msie") != -1) 
{ 
    rawAnswer = document.questionForm.userAnswer.value ; 
} 
else 
{ 
    rawAnswer = document.callThis.document.questionForm.userAnswer.value ; 
} 

lcAnswer = rawAnswer.toLowerCase () ; 
includedAnswer = lcAnswer.indexOf ("currentAnswer") ; 
zadaAnswer = lcAnswer.indexOf ("zada") ; 
brendanAnswer = lcAnswer.indexOf ("brendan") ; 
nineAnswer = lcAnswer.indexOf ("nine") ; 
thirtyAnswer = lcAnswer.indexOf ("thirty") ; 

if (choiceNumber == 0) 
{ 
    if (includedAnswer == -1 && zadaAnswer == -1 && brendanAnswer == -1) 
    { 
    checked = "wrong" ; 
    } 
} 
if (choiceNumber == 8) 
{ 
    if (includedAnswer == -1 && zadaAnswer == -1 && nineAnswer == -1) 
    { 
    checked = "wrong" ; 
    } 
} 
if (choiceNumber == 16) 
{ 
    if (includedAnswer == -1 && zadaAnswer == -1 && thirtyAnswer == -1) 
    { 
    checked = "wrong" ; 
    } 
} 
if (choiceNumber != 0 && choiceNumber != 8 && choiceNumber != 16) 
{ 
    if (includedAnswer == -1 && zadaAnswer == -1) 
    { 
    checked = "wrong" ; 
    } 
} 

if (checked == "wrong") 
{ 
    showWrongPage() ; 
} 
else 
{ 
    showRightPage() ; 
} 
} 


谢谢!

+0

请格式化您的代码。 – svinto 2010-04-23 18:34:51

+1

支架汤有这样的东西吗? – 2010-04-23 18:53:55

回答

0

它失败在这里:

document.callThis.document.questionForm.userAnswer.value;

document.call这是未定义的,我从来没有见过这个函数。

你或许可以取代

if (agt.indexOf("msie") != -1) 
    { 
    rawAnswer = document.questionForm.userAnswer.value ; 
    } 
else 
    { 
     rawAnswer = document.callThis.document.questionForm.userAnswer.value ; 
    } 

简单地将其替换为:

rawAnswer = document.questionForm.userAnswer.value;

我只在Firefox中测试过这个,但是我不明白为什么它在其他地方不起作用。

+0

谢谢!这解决了它!我测试了不同的浏览器。 – 2010-04-24 19:54:01

0

第一个答案是对的。 'callThis'在我所知的任何地方都不存在。我想这是一些旧的netscape的事情。

我从来不会按名称进行表单访问,但该JavaScript看起来应该起作用。替代版本将如下所示:

rawAnswer = document.getElementsByName('userAnswer')[0];

+0

谢谢!是的,在这个提示之后,我去了Google搜索。我无法获得明确的搜索结果显示callThis函数。 – 2010-04-24 19:54:44