1

文字列を比較するJSで奇妙な問題が発生しています。1 つの文字列はユーザ​​ー入力からのものです。

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;

言葉が同じであっても、それは間違っています。「first」変数と「second」変数を追加して、違いが生じるかどうかを確認しました。以前は、'x' と 'y' を比較してみました。x.value==y、x==y.value、および x.value==y.value も試しました。'first' と 'second' も同様です。驚くべきことに、 first.value==second.value は、そうであってはならない場合でも、常に true であることがわかりました。

<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>
4

3 に答える 3

3

getElementById文字列ではなくDOM要素への参照を返すため、文字列を比較するのではなく、DOM要素を比較しています。それらは異なる要素であるため、そうではありません==

少なくとも、最後の 3 行は次のようにする必要があります。

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

(たとえば、文字列である要素の を使用しますinnerHTML。) 私はおそらく、DOM に戻って値を取得するよりも、値を変数に保持したいと思います。

于 2013-03-11T06:26:46.930 に答える
0

例えば:

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

この値を新しい文字列 "first" に変更します >> ここで f は小さいです

y2 = "first"

現在、両方が同じタイプの場合、大文字と小文字が区別されます。

if(y==y2)

だから値は..

First == first 

になりますfalse

そのため、内部htmlで渡すデータを確認してください。空白を追加していないことを確認してください..

これで問題が解決することを願っています。:)

コードを変更した後に解決されない場合は、コメントを返します:)

于 2013-03-11T06:53:24.803 に答える
-1

(first==second) の代わりにこれを使用します。

if(first===second)

次のようにhtmlから値を取得します。

 first = document.getElementById("youTyped").innerHTML;
于 2013-03-11T06:27:12.143 に答える