Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将多个事件添加到同一函数会导致超过最大堆栈大小_Javascript_Jquery - Fatal编程技术网

Javascript 将多个事件添加到同一函数会导致超过最大堆栈大小

Javascript 将多个事件添加到同一函数会导致超过最大堆栈大小,javascript,jquery,Javascript,Jquery,我试图允许使用可编辑表的用户通过按enter键提交更改,同时关注元素。这个按键很好用。但是,focusout导致超过最大堆栈大小。我尝试了event.stopPropagation()来停止连续事件,但我无法找出我做错了什么。以下是我所拥有的: $(document).on('keypress focusout', '.prefill1', function(event) { var keycode = (event.keyCode ? event.keyCode : event.whi

我试图允许使用可编辑表的用户通过按enter键提交更改,同时关注元素。这个按键很好用。但是,focusout导致超过最大堆栈大小。我尝试了event.stopPropagation()来停止连续事件,但我无法找出我做错了什么。以下是我所拥有的:

$(document).on('keypress focusout', '.prefill1', function(event) 
{
   var keycode = (event.keyCode ? event.keyCode : event.which);
    if(keycode == '13' || event.type == 'focusout')
    {
        event.preventDefault();

        if($(this).attr('edit_type') == 'button')
        {
            return false; 
        }

        //get the original entry
        var original_entry = $(this).attr('original_entry');

        var row_id = $(this).closest('tr').attr('row_id'); 

        var row_div = $(this)               
        .removeClass('bg-warning') //add bg css
        .css('padding','')

        var col_name = row_div.attr('col_name'); 
        var col_val = row_div.html(); 

        var arr = {};
        //get the col name and value
        arr[col_name] = col_val; 
        //get row id value
        arr['row_id'] = row_id;

        if(original_entry != col_val)
        { 
            $(this).blur();
            var name = col_val;
            var finder = $(this).closest('tr');
            var col_val2 = col_val.toUpperCase();

            $.ajax({
                method: "POST",
                url: "page.php",
                success:  success,
                 dataType: "json",
                data: { row_id: row_id, }
               })
            .done(function( msg ) {
                }); 
            function success(data) {
            useData(data, name, finder);
            var flen = data.length;
            console.log(flen);
            }
        }

    }

});

在调用
blur()
之前,您可能需要检查事件类型是否为
'focusout'
。这可能会导致另一个
focusout
事件

/** ... **/
if(original_entry != col_val) { 

  if(event.type != 'focusout')
    $(this).blur();
  }
  /** ... **/

我在发布的代码中没有看到与
单击相关的内容…我是说focusout。这是一个打字错误。哇,这正是我需要的。非常感谢你!