函数在另一个函数javascript中

时间:2014-09-11 22:36:46

标签: javascript jquery

function textarea_replace(that){

    var charnum = $(that).attr('data-char'),
    op = $(that).attr('data-op'),

    target = $(that).find('h2'),
    textarea = $(target).next('textarea'),
    testo = $(target).text();

    $(target).next('textarea').val(testo).show().focus();
    $(target).css({ 'display': 'none' });

    $(textarea).on({
        blur: function(e){
            e.stopPropagation();

            testo_fin = $(this).val()
            if (testo_fin.length > charnum) {

                var text_cut = testo_fin.substr( 0, charnum )
                $(this).prev().css({ 'display': 'block' }).text(text_cut)

            } else {
                $(this).prev().css({ 'display': 'block' }).text(testo_fin)
            }

            $(this).hide();
            $(textarea).off('blur');

            send_textarea(op, testo_fin, url_global);
        }
    });
}

我称之为事件处理程序

$('.edit_box').on({
   click: function(e){ 
      $('.edit_box').off('click');
      that = $(this)
      textarea_replace(that);       
   }    
});

我不明白如何暂时停止并重新激活点击事件,因为如果我点击textarea它会调用另一个事件并发送文本2次(或更多次)。

1 个答案:

答案 0 :(得分:1)

我不确定我是否真的不知道应该在这里发生什么,但你总是可以使用jquery的.stop()方法来清除动画队列(如果你添加了自定义的东西,还可以使用clearQueue())

$(".edit_box").click(function(){
    doSomething($(this));
}

function doSomething(what){
    what.stop() //Clears the queue, avoiding weird behaviour
    //Eventually change some properties, restore your textarea, etc.
    blur(what)
}

function blur(what){
    //Your stufff here
}