2012-01-26 3 views
0

ここには、railsアプリケーションのjqueryコードがあります。コードの目的は、#rfq_need_reportの価値を評価およびneed_reportがtrueの場合#rfq_report_languageを表示したり、偽の場合は非表示にすることです:Javascript IFループがfalseになり、jqueryで真のループを実行します

$(document).ready(function() { 
    var rpt = $('#rfq_need_report').val(); 
    alert(rpt); 
    if (rpt) { 
    alert(rpt); 
    $('#rfq_report_language').show(); 
    alert('show');  
    } else { 
    $('#rfq_report_language').hide(); 
    alert(rpt); 
    alert('hide'); 
    } 
}); // end ready 

ここでアラートがちょうどデバッグのためです。 rptはfalseですが、警告( 'show')は実行されます。 ifループが偽を取っていると思われ、trueのためにループを実行することに決めました。いつかループが働いていて、いつかそれはしません。何がこの奇妙な行動を引き起こす可能性がありますか?ありがとう。

+0

多分rptは空白に見えますか? ''はfalseに評価されます ''は真と評価されます – dave

+0

javascriptでalert(..)の代わりに、あなたのブラウザがサポートしている場合、または拡張機能をダウンロードしてコンソールを持つことができる場合はコンソールを使用することを検討してください。単純なconsole.log(値)は、文字列かブール値かその値かを示します。それは警告(...)の呼び出しでデバッグするよりはるかに優れています – StevenGilligan

答えて

2

HTMLでは、value="something"のような入力の値フィールドは常に文字列として評価されます。私の推測では、javascriptでは、その値をtrueまたはfalseに設定していますが、実際には文字列として "true"または "false"として設定されています。助けるため、boolean型に変換し、How can I convert a string to boolean in JavaScript?

1

RPTは、文字列のようになります。:あなたは、このトピックに答えたものを試みることができる

if(rpt === "false") { rpt = false; } else { rpt = true; } 
1

私は$('#rfq_need_report').val()は、実際のブール戻って渡していないことを前提としなければなりませんJavaScriptでは 'truthy'とみなされます。そのため、if文がtruth句を実行するのはこのためです。

2つのクイック方法(私が使用する)実際のブール値に 'truthy' 値を変換するがあります

1:var bool = !!truthy;

2:var bool = truthy === 'true'

期待したとき、私は第二の使用は文字列の値を返します。

最初の例で説明が必要な場合があります。

最初の!真実の値を真のブール値に「nots」しますが、私が望むものとは反対ですが、2番目の「nots」は正しい位置に戻っています。

truthy vs falsyの他の例については、好きな検索エンジンにjavascript truthy falsyをポップアップして読み始めます。私の個人的なクイックリファレンスは:Truthy and falsy in JavaScript

関連する問題