jQuery在调用后重置one()方法

时间:2016-03-31 00:55:56

标签: jquery html onclick

我试图在执行后重置一个()。

这是我的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,但再次点击textareaone()没有任何结果。

2 个答案:

答案 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的可见性。