3

多数のリンクのjqueryクリックイベントとMVCビューの1つのドロップダウンセレクターがあり、イベントを実行する前にそれらのデフォルトを防止します。これらのほとんどはビューにリダイレクトされるためです(リダイレクトによってjqueryコードが停止しません) ?)。クリックイベントでのすべてのコールバックの後、リンクとドロップダウンセレクターにデフォルトのイベントを実行させて、何も起こらなかったようにページに表示されないようにします。

すべてのリンク/ドロップダウンをデフォルトに戻し、jqueryでプログラムでクリックする簡単な方法はありますか?私は試してみましたが$(this).click()、運がありませんでした$(this).submit()e.click()e.submit()

これが私のコードです

 $("input,a,select").not("#SubmitButton").click(function (e) {
        e.preventDefault();
        console.log("prevented default");
        deletePreview($(this));
    });
    function deletePreview(button) {
        console.log("clicked");
        //Delete Offer from DB
        $.post('@Url.Content("~/")Offer/DeleteJoAnnOffer/?offerId=' + offerID, function (data) {
              console.log("finished deleting");
              if (button.attr('id') == "CancelButton") {
                 window.location.href = '@Url.Content("~/")Offer/CreateJoAnn/';
              } else {

                  //DO DEFAULT ACTION HERE

              }
       });
    };

[編集]:もう1つの質問:preventDefault()を使用しない場合、jqueryイベントは実行されます(コンソールログが「クリック」されたため、最初の部分です)が、コンソールが原因でjquery投稿が実際に実行されているかどうかを確認できません新しいページで更新されます。

4

2 に答える 2

2

jqueryの「post」関数は非同期操作です(非同期フラグはデフォルトでtrueです)。クリックイベント内のコードは、ページがリロードされる前に完全に実行されるため、preventDefaultを使用する必要はありません。同期するには、deletePreviewの投稿機能を変更する必要があります。

        $("input,a,select").not("#SubmitButton").click(function (e) {
             console.log("you do not need to call prevented default :)");
             deletePreview($(this));
         });
         function deletePreview(button) {
             console.log("clicked");
             //Delete Offer from DB
             $.ajax('@Url.Content("~/")Offer/DeleteJoAnnOffer/?offerId=' + offerID,
             {
                 async: false,
                 success: function (data) {
                     console.log("finished deleting");
                     if (button.attr('id') == "CancelButton") {
                         window.location.href = '@Url.Content("~/")Offer/CreateJoAnn/';
                     } else {

                         //DO DEFAULT ACTION HERE

                     }
                 }
             });
         };

これは、クリックイベント内のコードがdeletePreviewのajax呼び出しが完了するまで待機することを意味します。

非同期パラメーターの説明については、http://api.jquery.com/jQuery.ajax/を参照してください。

于 2011-08-17T23:51:57.790 に答える
0

あなたの場合、イベントハンドラーが最初に実行されるため、preventDefaultを呼び出す必要はないと思います。(たぶん、どこか別の場所に移動したいときにそれを呼び出すことができれば。)

于 2011-08-17T22:50:04.397 に答える