当函数已经被其他事件调用时,jQuery停止函数的调用。

问题描述 投票:0回答:1

我想用两种方式调用一个函数:无论哪种方式,当函数被调用时,都不应该让另一个函数调用方法

renameFolder 在两个地方被调用:第一次是在焦点退出时,第二次是在按下回车键时。

问题是当回车键被按下时,它调用了2次函数1次是在回车键被按下时,第二次是在焦点退出时。

以下是我的jsfiddle例子。https:/jsfiddle.nettzx0ojLk12

以下是我的代码。

$('#rename').click(function () {

        //delete previous popup-menu if exists
        removeMenu();

        var folder = e.target.id;
        var folderId = $("#" + folder).attr("id");
        var folderName = $('#' + folder).parent().parent().children('.bd-title').text().trim();

        $('#' + folder).parent().parent().children('.bd-title').replaceWith('<textarea class="bd-folder-title-input" oninput="this.style.height = `1px`;this.style.height = (10+this.scrollHeight)+`px`;"  onfocusout="renameFolder()" maxlength="50" cols="10">' + folderName + '</textarea>');
        $('textarea').focus();
        $('textarea').select();
        $("textarea").keypress(function (e) {
            if (e.which == 13 && !e.shiftKey) {
                // alert(e);
                // $('textarea').trigger( "focusout" );
                // console.log(e);
                // e.trigger('focusout');
                // $('#' + folder).parent().parent().children('.bd-folder-title-input').trigger( "focusout" );
                $('body').focus();
                // console.log($(e.currentTarget));
                $('.bd-folder-title-input').trigger('focusout');
            }
        });

    });
javascript jquery jquery-events
1个回答
0
投票

调用focus和select之后再加上focusout listner即可。

$('#rename').click(function() {

  //delete previous popup-menu if exists

  var folder = 1;
  //alert(folder);
  var folderId = $("#" + folder).attr("id");
  var folderName = $('#' + folder).parent().parent().children('.bd-title').text().trim();

  $('#' + folder).parent().parent().children('.bd-title').replaceWith('<textarea class="bd-folder-title-input" oninput="this.style.height = `1px`;this.style.height = (10+this.scrollHeight)+`px`;" maxlength="50" cols="10">' + folderName + '</textarea>');
  $('textarea').focus();
  $('textarea').select();
  $('textarea').on('focusout', function(event) {
    renameFolder()
  });
  $("textarea").keypress(function(e) {
    if (e.which == 13 && !e.shiftKey) {
      renameFolder();
    }
  });

});

在操场上见。https:/jsfiddle.netdenisstukalovespvc8t41#&一起js=5mdJ3oeu1y。

© www.soinside.com 2019 - 2024. All rights reserved.