0

背景: 投稿する特定のデータを追加する必要があります。ajaxSetupネイティブフォームの送信に必要であることを除いて、非同期リクエストに対してjQueryが行うことと同様です。

フォームを送信する前に、いくつかのフォーム フィールドをフォームに追加できるようにする必要がありますが、それらが既に存在する場合に備えて、重複するフィールドを追加しないようにしたいと考えています (つまり、検証などのために元の送信が失敗しました)。 )。

最初は、次のようなものが素晴らしく、首尾一貫していると思いました。

$("form").live("submit", function () 
{
    var $this = $(this);

    ($this.find('#stuff') ||
    $this.append('<input type="hidden" id="stuff" name="stuff" />'))
        .val('some value');

    // carry on with the native submit
    // this is actually correct, as opposed to $this.submit()  
    // which would create a loop

    this.submit();
});

つまり、を探し、#stuff見つからない場合は作成し、その値を "some value" に設定します。ただし、 の結果.find()は実際には jQuery ラッパーであるため、true一致する要素が見つからなくても.append()コードが実行されないという意味に暗黙的に変換されます。

この「要素を探して、まだ存在しない場合は作成する」シナリオ全体に取り組む良い方法はありますか?

4

2 に答える 2

0

ロジックを読みやすくチェックし続けるには、条件を展開します。

if ($this.find('#stuff').length) {
  $this.find('#stuff').val('some val');
} else {
  $this.append('<input type="hidden" id="stuff'" name="stuff" value="some val" />');
}

または、要素を削除して再度追加することもできます...「dom操作は高価です」ことはわかっていますが、操作するフィールドが複数ある場合は、この方法の方がはるかにきれいです。

$this.find('#stuff', '#stuff2', ...).remove()
  .append('<input type="hidden" id="stuff" name="stuff" value="some val" />...');
于 2013-03-07T23:37:46.780 に答える