1

完全に間違った論理に基づく元の質問:O

$(function() {
  var x=0,y=1;
  $("#div_id").find("input:text").each(function (i, input)  {
    $(this).val(""+(i % 2 == 0)?x++:y++);
  });
});  

値から""+を削除すると、この間違った結果が得られます

ここに画像の説明を入力してください

私が欲しいものの代わりに、これはこれです:

ここに画像の説明を入力してください

私が小道具を使用する場合も同じです:

    $(this).prop("value",""+(i % 2 == 0)?x++:y++);

++のプレフィックスを付けても同じです

私は何を見落としていますか?これは明らかなことですか?


更新:私はここでボートを完全に逃しました。

これが私が書くつもりだったコードで、「」なしで動作します

$(function() {
  var x=0,y=1;
  var inputs = $("#div_id").find("input:text");
  var y = Math.ceil(inputs.size()/2);
  inputs.each(function (i, input)  {
    $(this).prop("value",(i % 2 == 0)?++x:++y);
  });
});  
4

2 に答える 2

6
"" + (i % 2 == 0) ? x++ : y++

は次のように解釈されます (優先規則を参照)

("" + (i % 2 == 0)) ? x++ : y++

andは両方とも空でない文字列("" + (i % 2 == 0))であるため、常に trueです。したがって、あなたの例では、ブランチを無視して常に使用しています。"true""false"x++y++

于 2013-02-08T10:17:57.250 に答える
1

式の左から右への + 演算子の結合規則のようです。削除すると、条件演算子の条件部分""+のみが作成され、true または false に評価されます。(i % 2 == 0)ただし、含めると、文字列ではなくブール値に評価されず、常にtrueになります。

文字列を使用すると、常に真になります

alert("" + false ? "true" : "false");

ライブデモ

于 2013-02-08T10:17:47.773 に答える