2012-02-08 17 views
0

ボタンをクリックすると開くdiv(フォーム)があります。タイムフィールド、日付、テキストボックスのような形式で特定のコントロールがあります。フォームが開くと、データがプリロードされます。フォームの送信ボタン(Apply Changes)にもフォームがあります。strange jquery form submit

フォーム内の何も変更せずに単に「変更を適用」ボタンをクリックするだけでアクションは発生しませんが、何かを変更した場合はフォームが保存されます。

この動作をどのように定義できますか?私は単純に「変更を適用」ボタンをクリックした場合

間違って解釈言語のため申し訳ありません...

私のフォームは救われません。 jqueryでフォームを保存する前に、コントロールの1つを編集する必要がありますか? (例えば、data()を使用)コントロールチェンジの値は、その後、フォームがこの場合にのみ送信されることを可能にする場合

+1

郵便番号をください。 – Joe

+0

その動作の実装方法、またはその動作の名前は何ですか? – nnnnnn

+0

@nnnnnnn:この動作の名前は何ですか? – Premanshu

答えて

1

は、ここでデータを形成するための変更を追跡するのラフな方法です:

function dealWithForm(){ 
    var hasChanged = false, 
     $form = $('form'); 

    $('input, select', $form).on('change', function(){ 
    hasChanged = true; 
    }); 

    $('form').submit(function(){ 
    if(hasChanged){ 
     $form.submit(); 
     // or post asynchronously with ajax  
     hasChanged = false; 
     $.post(// blah blah); 
    } else { 
     // stop form from submitting. 
     return false;  
    } 
    }); 
} 

$(document).ready(function(){ 
    dealWithForm(); 
}); 
+0

私が探していたもの。コントロールは変更されていなくても保存されます。上記のことを少し修正すれば、私は成功に向かうだろう。おはようございます – Premanshu

1

は、フォーム内のすべてのコントロールのchangeイベントを処理することができ、<form>要素にフラグを設定しますフラグが設定されています。

$("form").on("change", ":input", function() { 
    $(this).closest("form").data("someControlHasChanged", true); 
}).on("submit", function(e) { 
    if (!$(this).data("someControlHasChanged")) { 
     e.preventDefault(); 
    } 
}); 
+0

ありがとう@Frederic .... – Premanshu

0

それはあなたが自動的に変更を投稿したい場合は明らかではない、または変更を掲載したい場合は、「適用したとき変更はclickeですd。 (変更が加えられていない場合は、適用変更は何もしません) 変更がある場合、私は見ることができますポスト。

唯一の問題は、「/」は、エスケープ/エスケープする必要がされています。 汚い回避策/ハックは、古い値と目に見えないのdivのを生成することである。

とその内部に古いフィールドを生成し、次に${oldFIeld1}.text()を取得します。 注:これはちょっとしたハックで、エスケープやアンエスケープを避けるための微妙な方法があります。