我试图在执行后重置一个()。
这是我的HTML:
<textarea name="comment"> Write comment...</textarea>
<div id="buttons" style="display:none">
<button id="submit">Submit</button>
<button id="cancel"></button>
</div>
以下是将文本区域转换为wysiwyg的第一部分:
$('textarea[name=comment]').one("click", function() {
$(this).editor();
$("#buttons").show();
});
以下是重置所有内容的部分:
$('#cancel').click(function() {
$('textarea[name=comment]').editor('destroy');
$("#buttons").hide();
});
第一部分工作正常,textarea
转换为编辑器,buttons
可见,现在第二部分,删除编辑器并隐藏buttons
,但再次点击textarea
,one()
没有任何结果。
答案 0 :(得分:2)
如果您希望多次触发,请不要使用.one()
。如果您希望行为是有条件的,请将其明确写入代码。
$('textarea[name=comment]').on("click", function() {
var editor_disabled = $(this).data("editor-disabled");
if (!editor_disabled) {
$(this).editor();
$("#buttons").show();
$(this).data("editor-disabled", true); // disable until we cancel
}
});
$('#cancel').click(function() {
$('textarea[name=comment]').editor('destroy');
$("#buttons").hide();
$('textarea[name=comment]').data("editor-disabled", false); // re-enable
});
答案 1 :(得分:1)
one()
只会触发一次然后消失,因此您必须在取消点击处理程序中再次订阅该事件。您可以将其包装在函数中以避免重复自己:
function registerCommentClick() {
$('textarea[name=comment]').one("click", function() {
$(this).editor();
$("#buttons").show();
});
}
registerCommentClick();
$('#cancel').click(function() {
$('textarea[name=comment]').editor('destroy');
$("#buttons").hide();
registerCommentClick();
});
或者,不要使用one()
,而是使用旗帜或检查是否存在编辑器/ #buttons
的可见性。