2012-03-16 15 views
-3

誰もこのIF文が機能しない理由を教えてください。私はjQueryとFirebugを使用していますが、後者は私に有用な情報を与えていません。IF文の正しい構文

すべてのフィールドが完了し、スクリプトが入力を確認するために数秒ごとに実行されると、「送信」ボタンが表示されます。

私のコードの抜粋は少しこのように書き:...

function checkForm(){ 
    var userName = $('#name').val(); 
    var userContent = $('#content').val(); 
    var userEmail = $('#email').val(); 

    // The following line shows me that the values for the fields are all getting picked up properly 
    $('#report').html("userName: "+userName+"<br />userContent: "+userContent+"<br />userEmail: "+userEmail); 

    // But the following line is throwing some kind of error 
    if (userName == "" || userContent == "" || userEmail == ""){ 
     $('#update').slideDown(); 
    } else { 
     $('#update').slideUp(); 
    } 
} 

$(document).ready(function(){ 

    $('#update').hide(); 
    setInterval('checkForm()' , 2000); 

}); 

そして、私のHTML

<div id="report"></div> 
<form id="submitfact"> 
    <div id="update">Update Database</div> 
    <label><input id="name" name="name" type="text" value="" /><span>Fact submitter's name</span></label> 
    <label><input id="email" name="email" type="text" value="" /><span>Fact submitter e-mail address</span></label> 
    <label class="content"><span>Fact text</span><br /><textarea id="content" name="content"></textarea></label> 
</form> 

編集...

人々は私が「思えば私が謝罪エラーメッセージを提供しないことで時間を無駄にしていますが、Firebugは単に私に何か有用なものを与えていません。私は合理的に経験豊富なPHPプログラマですが、jQueryについてはかなり新しいので、私はまだ言語を書くこととそれをデバッグすることに慣れていることは認めています。 Firebugのレスポンスのスクリーンショットを投稿したいのですが、新しいユーザーとしては許可されません。行番号の列に「赤いエラーサークル/黄色の再生三角形」のアイコンが表示されます(「スクリプト"タブ)上に示した行には、"スクリプト "パネルと"コンソール "パネル以外の他の場所を教えてくれない限り、何もありません。

別の編集...

まあ、それはCristophの提案を見てとることでIを固定してしまいました。基本的には同じソリューションですが、関数として呼び出す代わりに、 "インライン"にします。私は2つの手法の違いは何であるか全くわからないか、それは単に私が持っていた地元の問題ですが、私の新しいjQueryのは、次のようになりますか:私は見るためにあなたの他のコメントを通じて顔をしているだろう

$(document).ready(function(){ 
    $('#submitfact').keyup(function(){ 
     var userName = $('#name').val(); 
     var userContent = $('#content').val(); 
     var userEmail = $('#email').val(); 

     $('#report').html(userName + "<br />" + userContent + "<br />" + userEmail); 

     if (userName == "" || userContent == "" || userEmail == ""){ 
      $('#update').slideUp(); 
     } else { 
      $('#update').slideDown(); 
     } 
    }); 
}); 

私はそれを合理化することはできますが、少なくとも私は現在作業基準を持っています!お時間のために、みんな:)

+2

本当に空の文字列か 'null'ですか?また、タイマーではなく、入力が変更されたときにこのチェックを行います。 –

+0

回線にエラーが発生している場合は、エラーを送信すると便利ではないと思われますか?また、Moo-Juiceが正しいです、なぜあなたはタイマーでこれをやっていますか? – anothershrubery

+0

** **エラーとは何ですか? – gdoron

答えて

1

まず、それは本当にエラーを投げている、またはそれは単に動作しませんか?

私はあなたのコードを理解する方法から、あなたの場合の条件は次のようになります。

if (!userName === "" && !userContent === "" && !userEmail === ""){ 
    // show 
    $('#update').slideDown(); 
} else { 
    // hide 
    $('#update').slideUp(); 
} 

第二:タイマーでこれを行うことは悪い考えです。 inputValueでは、変更後にチェックするのEventHandlerを紹介

ははるかに良いです:

$("input").change(function(){ 

    // if all inputs are filled, show Button, else hide it 

}); 

P.S. Javascriptの詳細な情報:空の文字列は「偽」と見なされるため、 username === ""!usernameと書くことができます。ただし、undefined,null,false0およびNaNも「偽」とみなされます。つまり、あなたはそれらを区別できません。この理由から私は好きですusername === ""note the === !

+0

Thanks Christoph - あなたのロジックにマッチするように自分のコードを変更するだけで、最初のインスタンスは違いはありませんでしたが、私のコードをprとして書き直して、2番目の提案がトリックでした。私はそれに応じて私の元の投稿を修正しました。ありがとう! :) – Doug

+0

これで正しく動作しますか? – Christoph

+0

それは - 元の投稿を編集して、機能しているスクリプトを表示しています...何が違いを生み出しているのか分かりません。TBH - うまくいけば、jQueryでうまくいけば分かります:) – Doug

1

はこれにあなたの評価を変更してみてくださいありがとう:すべての

if (!userName || !userContent || !userEmail){ 
    $('#update').slideDown(); 
} else { 
    $('#update').slideUp(); 
} 
+0

あなたはそれをさらに少し単純化することができます: 'if(!(userName && userContent && userEmail)){' – Blazemonger