0

セーバー。あなたはひびのようです。修正が必要なときにあなたのところに来ます...ユーザーがフォームを送信する前に、jQueryダイアログを使用してコンテンツを確認するユーザー送信のコメントシステムがあります。

最初は問題ありません。ダイアログが正常に起動し、フォームが送信されます。もう一度投稿しようとすると、ajax呼び出しが失敗し、ダイアログが起動せず、デフォルトのフォームが送信されます。

ダイアログは、フォームのajax作成が成功したときにバインドされます。私が知る限り、ダイアログはバインドされているはずですが、確かに何かが欠けています。

これがコードです。

最初のajax呼び出しは、コメントを投稿するためのフォームをもたらします。それが正常に読み込まれると、ユーザーがフォームを送信しようとしたときに呼び出されるダイアログボックスを開始します。

// Make the ajax call for the apppropriate content.

$.ajax({
        type: 'Get',
        url: 'a/url/to/process/form',
        cache: false,
        beforeSend: function() {
        },
        success: function(data) {
            $('#commentBox_' + id).html(data).fadeTo('fast', 100);
            $('#' + oId).addClass('remove').removeClass('respond').html('Close');
            // Destroy the instance if it has already been called.
            if(CKEDITOR.instances['comment'])
            {
                delete CKEDITOR.instances['comment'];
            }
            $('#discussionComment_' + id).submit(function() {
            CKupdate()                                            
            });
            // Set the editor.
            CKEDITOR.replace('comment', {toolbar : 'Basic', skin : 'Office2003', height : 250})
            // Set the submit option.
            $('#postComment_' + id).live('click', function() {
                // Warn the user about submitting. Let them review their comment.
                CKupdate() // Update the field with user input content.
                $('.ui-dialog-content').dialog("destroy"); // Get rid of any old dialogs lurking around.
                // Get the content from the form for the confirmation dialog
                var commentTitle = $('#commentSubject_' + id).val();
                var commentBody = CKEDITOR.instances['comment_' + id].getData();
                // Build the new dialog.
                var NewDialog = $('<div>You are about to submit your comment. Verify before submitting.<hr /><h4>' + commentTitle + '</h4><div>' + commentBody + '</div></div>');
                $(NewDialog).dialog({
                    modal: true,
                    title: 'Confirm Post',
                    width: 500,
                    buttons: {
                    'Submit': function() {  
                        commentPost_ajax(id); // Post the form via ajax.
                        $(this).dialog('destroy');
                        },
                    'Edit': function() {
                        $(this).dialog('destroy');
                        return false; // Don't submit the form.
                        }
                    }
                }); 
                return false;
            });// Click to submit form.

        },
        error: function() {
            window.location = "../../post_discussionComment.html?dId<%=dId%>&amp;id=" + id
        }
    }); 
// Stay here. We're just starting to have fun.
    return false;

そして、これがajaxpostの関数です。

function commentPost_ajax(id) {

// Just close and submit.
$('#discussionComment_' + id).ajaxSubmit({
    beforeSend: function() {
        $('#discussionComment_' + id + ' input:submit').html('Sending...');
        $('#newEntry').attr('id', '');
    },
    success: function(data) {
        $('#commentBox_' + id).after(data);
        $('#discussionComment_' + id).remove();
        $('#discussionComment_' + id).hide('puff', function() { $(this).remove() }, 'fast');
        $('#content_' + id + ' a.remove').removeClass('remove').addClass('respond').html('Respond');
        $('.expand').show();
        window.location + $('#newEntry');
        $('#newEntry').children().effect("highlight", {}, 3000);
    },
    error: function () {
        alert('There was a problem posting your comment. Please try again.');
    }
 }); // Form submit 
}

どんな助けでもいただければ幸いです。私は他の多くの質問を熟読しました、そしてそれらのどれもこれに直接話しません。もしそうなら、私はそれらを見つけることができませんでした。

4

2 に答える 2

0

シナリオを正しく理解し、Ohgodwhyが言及した二重削除の問題が修正されたと仮定すると、当面の問題は「(...)デフォルトのフォームが送信された」であるように見えます。

現在のコードで他のJSエラーが発生していないと仮定すると、このシナリオにも遭遇しました。このシナリオでは、ダイアログが2回表示されたときにデフォルトのフォームが送信されます。以下のコードのように、ダイアログが閉じられたら、DOMからダイアログdivを削除することで修正しました。

以下のコードは、この質問で送信された元のコードのバリエーションです。

   $('#postComment').live('click', function() {
      var NewDialog = $('<div></div>');
      $(NewDialog).dialog({
         modal: true,
         title: 'Confirm Post',
         width: 500,
         buttons: {
            'Submit': function() {   
               $(this).dialog('close');  
            }
         },
         close: function(event, ui) { 
            $(this).dialog('destroy');
            $(this).detach();
            $(this).remove();
         }
      }).dialog('open'); 
于 2012-08-25T22:30:19.880 に答える
0

私が取り組んでいるいくつかのコードで同じ種類の問題が発生しています。

ajaxは最初の使用では正しく機能しますが、2回目の使用でも起動しません。

私の回避策は、処理コードを次のような関数に入れることでした。

function my_do_processing( myitem ) {
  // set up variables using myitem.data('...') or standard jquery
  var my_response = $.post(ajaxurl, { variables } );
  my_response.done( function( data ) {
    $('#container').html(data);
    $('a.eventtrigger').bind('click', function() {
      my_do_processing($(this));
      return false;
    });
 });
};


$('a.eventtrigger').click(function() {
  my_do_processing($(this));
  return false;
});

これにより、クラスeventtriggerを使用してアンカーに最初のクリックイベントが設定され、発生すると、同じイベントがajaxを介してドキュメントに入力されたコードにバインドされます。

それは私にとってはうまくいきます...しかしあなたのマイレージは異なるかもしれません。

于 2013-07-18T19:21:31.447 に答える