2013-03-11 30 views
1

我在JS比较字符串时出现了一个奇怪的问题。一个字符串来自用户输入。在javascript中比较字符串的麻烦

y = data; 
document.getElementById("typeThisWord").innerHTML = y; 
x = document.getElementById("inputField"); 
document.getElementById("youTyped").innerHTML = x.value; 
first = document.getElementById("youTyped"); 
second = document.getElementById("typeThisWord"); 
if(first==second) correct=true; 

当这些词相同时,它仍然是错误的。我在“第一”和“第二”变量中添加了一些变量,以确定它是否会起作用。以前我试过只是比较'x'和'y'。我也尝试过x.value == y,x == y.value和x.value == y.value。与'第一'和'第二'相同。令人惊讶的是,first.value == second.value始终是真实的,即使它不应该。

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 
    <script> 
     var x, y; 
     var first, second; 
     var availV = window.innerHeight - 100; 
     var availH = window.innerWidth - 100; 
     var randV, randH; 
     var correct = new Boolean(); correct=true; 
     var imageX; 
     function displayWord() { 

      if(correct) { 
       correct=false; 
       $.ajax({ 
        url: "http://localhost:25578/TypeGood/VisitsSession", 
        success: function(data) { y = data; }, 
        async: false 
       }); 
       document.getElementById("typeThisWord").innerHTML = y; 
       imageX = document.createElement("img"); 
       imageX.src = "https://encrypted-tbn1.gstatic.com/images?q=tbn:ANd9GcRPRV4XdE7C9sa0pM-FeXcOSQydg7Sh0INg-ZD6FKZ4wjY8WPHa5Q"; 
       imageX.height = 100; 
       imageX.width = 100; 
       imageX.style.position = "absolute"; 
       randV = Math.round(Math.random() * availV); 
       randH = Math.round(Math.random() * availH); 
       imageX.style.top = randV + "px"; 
       imageX.style.left = randH + "px"; 
       imageX.style.zIndex = "-20"; 
       document.body.appendChild(imageX); 
      } 
      x = document.getElementById("inputField"); 
      document.getElementById("youTyped").innerHTML = x.value; 
      first = document.getElementById("youTyped").innerHTML; 
      second = document.getElementById("typeThisWord").innerHTML; 
      if(first==second) {correct=true;} 
      x.value = ""; 

     } 
    </script> 

回答

3

getElementById返回DOM元素,而不是一个字符串的引用,这样你就不会比较字符串,你要比较的DOM元素。由于它们是不同的元素,它们不是==

至少,你的最后三行应该是这样的:

first = document.getElementById("youTyped").innerHTML; 
second = document.getElementById("typeThisWord").innerHTML; 
if(first==second) correct=true; 

(例如,使用元素的innerHTML,这字符串)虽然我觉得我可能会继续在变量周围的值而不是返回到他们的DOM。的

+0

谢谢。它也在做同样的事情 - 它认为这两个因素在平等的时候是不相等的。我正在把我的JS块放在上面。 – user2155320 2013-03-12 02:03:39

+0

@ user2155320:两个不同*元素*永远不会相等。这就是我的答案。 – 2013-03-12 07:36:43

-1

使用这种替代(第一==第二):

if(first===second) 

和这样从HTML检索值:

first = document.getElementById("youTyped").innerHTML; 
+2

如果你比较的东西实际上是字符串,'=='和'==='没有丝毫的区别。无论如何,这与OP的问题无关,就是他们正在比较DOM元素。 – 2013-03-11 06:28:44

0

例如:

y = data; //data is string value "First" 

更改此值to new string“first”>> here f is small

y2 = "first" 

现在,当两者都是相同类型时,其区分大小写。

if(y==y2) 

所以值..

First == first 

,这将是false

因此,确保您在内部html中传递的数据。并确保你没有添加一些空白区域。

我希望这可以解决问题。 :)

评论回复如果修改代码后不解决:)

+0

也感谢MarmiK,但我不明白你在说什么。当你说: 你是什么意思首先//你指的是变量“第一”?或者这只是你说的第一件事? y =数据; //你是在重复我的代码中的内容吗?或告诉我这是原始数据而不是字符串? 将此更改为y“第一次”; //你希望我将变量更改为字符串“first”?或者是其他东西...?我不知道你的意思。 然后你可以检查第二个。 //我如何检查它? – user2155320 2013-03-12 02:13:27

+0

我说的是第一个意思是第一步,第二个意思是第二步,然后y =数据将不得不改变,所以y =“first”//字符串值。对不起,如果你不能清楚地了解:) 我会更清楚地说,它很匆忙,我猜。 谢谢, – MarmiK 2013-03-12 04:15:11