1

フォーム要素を循環してオブジェクトを構築するJavaScriptコードがあります。HTML入力フィールドとASP.NET入力フィールドが混在しています。ASP.NETはフィールドのIDをxxxxx_yyyy_idの形式に変更するため、split関数を使用して元のIDを抽出しようとしています。

 // Iterate over all the text fields and build an object
 $(':text').each(function () {

     var tokens = this.id.split("_");
     if (tokens.length = 3) {
         // Assume this is a .net inputbox - extract the original id
         inFormData[tokens[2]] = this.value;
     } else {             
         inFormData[this.id] = this.value;
     }
 });

上記のコードをステップスルーすると、最初のIDはctl00_ContentPlaceHolderCol1_forenameFieldであるため、tokens.length=3コードが実行されます。2回目の反復では、idはforenameField2であるため、tokens.lengthは1であると予想されますが、実際には3です。elseステートメントは実行されません。

これは単純なことかもしれませんが、私はそれを解決することはできません。トークン配列を調べると、2回目の反復では要素が1つしかありません。また、各反復後にarray.lengthを0に設定してみました。

助けていただければ幸いです。

4

4 に答える 4

5

これを修正します。

== instead of =. === is more better


     if (tokens.length == 3) {
         // Assume this is a .net inputbox - extract the original id
         inFormData[tokens[2]] = this.value;
     } else {             
         inFormData[this.id] = this.value;
     }
于 2012-04-30T16:13:39.890 に答える
2

そのため、テストするときは常に定数を最初に置く必要があります。比較記号を忘れると、エラーがスローされます。

if( 3 = tokens.length ) // throws an error
if( 3 == tokens.length ) // ok
if( 3 === tokens.length) // ok
于 2012-04-30T16:19:10.200 に答える
2

に変更= 3します=== 3

現時点ではtokens.length毎回上書きしています。

注意:正確な等価性チェックであるため、===より優先されます。2 つの等しいバージョンでは、比較の前に 2 つのオペランドを同じ型にキャストしようとします。これは、1. 不要、2. 非効率、3. エラーが発生しやすい場合があります。==

于 2012-04-30T16:14:54.523 に答える
1

から:

if (tokens.length = 3) {

に:

if (tokens.length == 3) {
于 2012-04-30T16:14:21.680 に答える