2015-11-09 51 views
0

我正在尝试创建一个回文检查器。现在看来,我的lengthChecker()不再被调用,每当一个单词不是回文时,条件也不会被调用,那么就说它不是回文。可能是什么问题?回文不正确的结果。

<!DOCTYPE html> 
<html> 
    <head> 
     <meta charset="UTF-8"> 
     <title>Lesson #6 Homework</title> 
     <script type="text/javascript" src="./js/palindrome.js"></script> 
    </head> 
    <body> 
    <h1>Is it a Palindrome?</h1> 
    <div id="mainCont"> 
    <p>Hello. Please enter a word, and I'll see if it is a palindrome.</p> 
    <p>Word: 
     <input type="text" id="str" name="string" /> 
     <button id="checkInput">Submit</button> 
    </p> 
    </div> 
    </body> 
</html> 

这里是JS截至目前:

function lengthChecker() { 
var str = document.getElementById("str").value; 
if (str.length > 10) { 
    alert("Sorry. Your input surpasses the 10 characters maximum. Please try again.") 
    return false; 
} else if (str.length == 0) { 
alert ("Sorry. Your input is too short, and doesn't meet the 10 characters maximum. Please try again.") 
    return false; 
} 
palindrome(); 
} 

function palindrome() { 
var revStr = ""; 
var str = document.getElementById("str").value; 
var i = str.length; 
for (var j = i; j >= 0; j--) { 
    revStr = revStr + str.charAt(j); 
} 
if (str == revStr) { 
    isPalindrome(); 
} else { 
    alert(str + " -is not a Palindrome"); 
} 
} 

function isPalindrome() { 
    alert(str + " is a Palindrome."); 
} 

document.addEventListener("DOMContentLoaded" , function(e){ 
var el = document.getElementById("checkInput"); 
el.addEventListener("click", isPalindrome); 
}); 
+0

似乎在这里工作? http://jsfiddle.net/ocjbzghf/ –

+0

当我在Chrome中测试时出现此错误。另外,我在做什么来使它说[对象HTMLInputElement]是一个回文。我希望它显示用户的输入。 – user1776479

+0

HTML从上到下加载。您的JavaScript在任何元素创建之前加载。一般来说,最好的做法是将您的脚本标签保留在您身体的尽头。这也有助于页面加载。 – saadq

回答

0

你有你的Javascript链接在head元素,所以它执行<button id="checkInput">进入了DOM。将其移至body的末尾或使其defer变为红色。

+0

脚本标记是否有效并且是身体标记的结尾?我通常认为它应该在头标之内? – user1776479

+0

是的,这是有效的和最好的做法,写在你的脚本在身体标记末尾 –

+0

这是一个被认为是一个很好的做法。如果你头脑中坚持使用脚本,可以使用提到的defer属性,或者调用与window.onload绑定的函数中的任何DOM相关的东西,或者从DOMContentLoaded监听器中调用(如其他答案所示)。 – myf

0

因为您正在绑定访问您的按钮,所以在正确加载页面之前。

当DOM加载时,您需要获取按钮并绑定事件处理程序。

document.addEventListener("DOMContentLoaded", function(e) { 
    var el = document.getElementById("checkInput"); 
    el.addEventListener("click", isPalindrome); 
}); 
+0

谢谢你解决了这个问题。 – user1776479