コメントをインラインで編集できるようにするためにいくつかの機能を追加しようとしています。これまでのところはかなり近いですが、私は2番目のイベントを引き起こそうとする問題を経験しています。それは初めて動作しますが、その後は失敗します。1つのボタンで2つのイベントを切り替える
$(function() {
var $editBtn = $('.js-edit-comment-btn');
var clicked = false;
$editBtn.on('click', $editBtn, function() {
clicked = true;
var $that = $(this);
var $form = $that.closest('.js-edit-comment');
var $commentTextBody = $that.closest('div').find('.js-comment-body');
var commentText = $commentTextBody.text();
var $editableText = $('<textarea />');
if ($that.text() === 'Save Edits') {
$that.text('Saving...').attr('disabled', true);
} else {
$that.text('Save Edits').attr('alt', 'Save your edits');
}
// Replace div with textarea, and populate it with the comment text
var makeDivTextarea = function($editableText, commentText, $commentTextBody) {
$editableText.val(commentText);
$commentTextBody.replaceWith($editableText);
$editableText.addClass('gray_textarea js-edited-comment').width('100%').css('padding', '4px').focus();
};
makeDivTextarea($editableText, commentText, $commentTextBody);
var saveEdits = function($that, $editableText) {
$that.on('click', $that, function() {
if (clicked) {
var comment = $that.closest('div').find('.js-edited-comment').val();
$editableText.wrap('<div class="js-comment-body" />').replaceWith(comment);
$that.text('Edit').attr('alt', 'Edit Your Comment').attr('disabled', false);
$('#output').append('saved');
clicked = false;
return false;
}
});
};
saveEdits($that, $editableText);
return false;
});
});あなたの作業のためのソリューション
まあ。 2番目のイベントはバブリングを続けます。私はe.stopPropagation()を追加することでボタンの2番目のイベントハンドラをクリックしようとしましたが、解決しませんでした。基本的に私が「保存」している理由は、この例を説明するためです。私は上記の方がはっきりしていたはずです。 –
@bob_cobbヒーローCooleosは、2番目のイベントは何ですか?私は以前のバージョンのjsfiddleも動作していないと思っていましたが、今は編集や保存ができません! +追加の保存が明確ではありませんでした。私は私が取得していない場合はごめんなさい、私は少し厚く聞こえるが、確かにあなたを助けることができることを知らせてください:)感謝の男! –