1

私はここで気違いになります。私は検索し、検索し、さまざまな方法を試してみましたが、私は何のエラーも出ませんが、呼び出す関数を呼び出すif/elseステートメントを取得できません。そうでなければ呼び出された場合、関数自体は正常に動作します。if文の内部ではなく、何が起こっていますか?if/else文が関数を呼び出していないか?

oops、ok私は2番目の部分で "var"を削除しましたが、まだ奇妙な動作をしています - 私がしたいことは、削除ボタンを押したとき、モーダル。その代わりに何をして、モーダルを閉じている、私はクリックして2回目を削除する必要がありますし、アイテムを削除し、モーダルはすぐに閉じる自体をポップアップします。

編集:イベントリスナーを削除し、代わりにhtmlでonclickを使用して、それが問題であるかどうかを確認しました。私はまだ同じ問題を抱えています。

var clickedCancel = false; 
var clickedDelete = false; 
//buttons false by defaul 
//if cancel button is clicked, set clickedcancel to true. 

//if confirm delete button is clicked, set clicked delete to true 
function cancelDeletion(){ 
    clickedCancel = true; 
} 

function confirmDeletion(){ 
    clickedDelete = true; 
} 

function deleteMovie(x){ 
    //open modal 
$('#modalContainerDelete').modal('toggle'); 


    if (clickedDelete == true){ 
    movies.splice(x,1); 
    addMovieToTable(); 

    $('#modalContainerDelete').modal('hide'); 
} else if (clickedCancel == true) { 

    $('#modalContainerDelete').modal('hide'); 
} 

}; 

最大の問題は、私の割り当ては、私は、配列から特定の項目を削除し、削除ボタンを必要としている、ですが、私は削除ボタンがある同じ行の行に削除ボタンをコーディングし、削除する必要があります、およびその部分がこのようにコード化された上:

function addMovieToTable(){ 
table.innerHTML = ""; 
for (i=0;i<movies.length;i++){ 

var row = table.insertRow(0); 
var cellTitle = row.insertCell(0); 
var cellDirector = row.insertCell(1); 
var cellDelete = row.insertCell(2); 
cellTitle.innerHTML= movies[i].title; 
cellDirector.innerHTML= movies[i].director; 
var deleteStuff = "<button onclick='deleteMovie(" + i + ")'>Delete</button>"; 
cellDelete.innerHTML = deleteStuff; 
} 

} 

内部HTML、および変数iを持つ部分は、私の周りにコーディングしようとしているものです、私は、そう何かを削除する前にそれを作ることになっていますモーダルがポップアップしますが、これが問題を抱えている主な理由は、セットアップを台無しにすることなくその周りをコード化しようとしていることです。

+4

ちょうど 'clickedDelete =を使用し、' click'ハンドラ '内部var'を削除しますtrue; ' – Satpal

+0

クリックハンドラ内の' var'を削除します。あなたは何度も何度も初期化しています –

+0

omg haha​​haありがとう、うわー、私は馬鹿だと感じています。> –

答えて

0

は、第二のVARを削除し、それが正常に動作します、あなたが二回clickedCancel clickedDeleteを宣言 ......

+0

ああ、oopsが間違ったことを編集しました。ごめんなさい –

0

を次のコード

var clickedCancel = false; 
var clickedDelete = false; 
//buttons false by defaul 
//if cancel button is clicked, set clickedcancel to true. 
var cancelDeletion = document.getElementById("cancelDeletion"); 
cancelDeletion.addEventListener("click", function() { 
    clickedCancel = true; 
}); 
//if confirm delete button is clicked, set clicked delete to true 
var confirmDeletion = document.getElementById("deleteConfirm"); 
confirmDeletion.addEventListener("click", function() { 
    clickedDelete = true; 
}); 

function deleteMovie(x) { 
    //open modal 
    $('#modalContainerDelete').modal('toggle'); 
    if (clickedDelete == true) { 
     movies.splice(x, 1); 
     addMovieToTable(); 
     $('#modalContainerDelete').modal('hide'); 
    } else if (clickedCancel == true) { 
     $('#modalContainerDelete').modal('hide'); 
    } 
}; 

を使用してください。また : あなたはそれで行われたときにイベントリスナーを停止し、あなたが複数の呼び出しに

編集を避けるためにそれを必要とするときだけ、それを発射する場合、そのより良い:ユーザーがキャンセルボタンをクリックし、クリックしてください場合

覚えているがdeleteボタンを押しても何も起こりません。なぜなら、eventListenerは古いオプション(キャンセル)を覚えているからです。なぜなら、複数の呼び出しを避けるためにそのリスナーをオン/オフする方法を見つける必要があるからです。あなたはそれがあなたのために動作しませんでしたキャンセル押した後に削除しようとする理由厥...

これは一例です:

function delete_comment(element, event){ 
     event.preventDefault(); 
     // get the post id 
     var post_id = $(element).parents("div.IdHolderDiv").attr("id"); 
     // get comment id 
     var comment_id = $(element).parents('div.singleCommentBox').find('div.CommentdialogboxUnderPOST').attr('id'); 
    // here is the confirmation button (where user press cancel or delete) 
     var confirmBox = "<div id='confirm_delete_comment' class='w3-modal'>"; 
      confirmBox += "<div class='alert warning' >"; 
      confirmBox += "<center><br><br>"; 
      confirmBox += "<p>Are you sure you want to delete this Comment!</p>"; 
      confirmBox += "<button class='w3-btn w3-ripple w3-red' > Delete</button>"; 
      confirmBox += "<button class='w3-btn w3-ripple w3-yellow' > Cancel</button>"; 
      confirmBox += "<br><br></center></div></div>"; 
// append the confirmation box to your Dom in an empty div 
     $('#confirm_delete').append(confirmBox); 
     // make that div visable 
     // confirmation message. 
     $('#confirm_delete_comment').css('display', 'block'); 

     // wait user confirmation. 
// and here you fire the event listener 
     $("#confirm_delete_comment").on("click", "button", function(event){ 
      event.preventDefault(); 
      var confirm = $(this).text().trim(); 
// check if user says cancel or delete and then you can turn the listener off 
      if(confirm == "Delete"){ 
       $.post('public/ajax/delete_comment.php', {post_id:post_id, comment_id:comment_id}, function(data){ 
        $.post('public/ajax/comment_get.php', {post_id:post_id}, function(data){ 
         // change the counter (comment number at the id of that specific post for full modle and index page) 
         $('#post_'+post_id+'_comments').text(data); 
         if(indexPage.length){ 
          $('#showPostFullScreen #post_'+post_id+'_comments').text(data); 
         }else if(profilePage.length){ 
          $('#showPostFullScreenProfile #post_'+post_id+'_comments').text(data); 
         } 
         // reload comments. 
         if($('#modal_post').css('display') == 'none'){ 
          load_comments(post_id); 
         }else if($('#modal_post').css('display') == 'block'){ 
          load_commentsFull(post_id); 

         } 

        }); 
        // get the notifications 
        load_notifications(); 
       }); 
       // remove listner. for older than 1.7 $('#infoarea_display_editon button').unbind('click'); 
       $('#confirm_delete_comment').off('click button'); 
       $('#confirm_delete').empty(); 
      }else if(confirm == "Cancel"){ 
       $('#confirm_delete_comment').off('click button'); 
       $('#confirm_delete').empty(); 
      } 
     }); 
    } 
+0

これで完了したら、イベントリスナーを停止するにはどうすればいいですか? –

+0

はあなたのコードに依存しています..例:ユーザーがdeleteボタンをクリックして関数内でdeleteMovie(x){この関数の最後にこれを書くと$( '#cancelDeletion')。off( 'click');)リスナーがオフになります。 – Sholi

+0

そして、ユーザーがキャンセルボタンをクリックしてから、削除ボタンをクリックしようとすると、eventlistenerは古いオプション(キャンセル)を覚えているので何もしません。なぜなら、複数の呼び出しを避けるために – Sholi

関連する問題