Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/438.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/76.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 chrome抛出未捕获范围错误:超过最大调用堆栈大小_Javascript_Jquery_Twitter Bootstrap Rails - Fatal编程技术网

Javascript chrome抛出未捕获范围错误:超过最大调用堆栈大小

Javascript chrome抛出未捕获范围错误:超过最大调用堆栈大小,javascript,jquery,twitter-bootstrap-rails,Javascript,Jquery,Twitter Bootstrap Rails,我正在尝试使用bootstrap popover构建一个简单的小部件 UW.UI.ProjectMember = { dropdown: ".project-member-select-dropdown", input: ".member-search-field", options: { container: $('.project-member-select'), trigger: "click", minChar: 2 }, renderTemplate: f

我正在尝试使用bootstrap popover构建一个简单的小部件

UW.UI.ProjectMember = {

dropdown: ".project-member-select-dropdown",
input: ".member-search-field",

options: {
    container: $('.project-member-select'),
    trigger: "click",
    minChar: 2
},

renderTemplate: function() {
    var template = '<div class="project-member-picker">'+
                        '<div class="project-member-search-box">'+
                            '<input type="text" class="member-search-field input-block-level" placeholder="Enter a name">'+
                            '<ul class="project-member-select-dropdown"></ul>'+
                        '</div>'+
                        '<div><p>You can invite your colleagues to use UberWork with you</p></div>'+
                    '</div>';

    this.options.container.append(template);

    return this;
},

initPopover: function() {
    var _this = this;

    $(".add-member-btn").popover({
        html: true,
        placement: "bottom",
        trigger: _this.options.trigger,
        container: '#window',
        content: _this.build()
    });
},

build: function() {

    return $('.project-member-picker').html();
},

delegateEvents: function() {
    var _this = this;

    $(document).on("keydown",'.popover .member-search-field', function(event) {
        _this.processInput(event, _this);
    });

    $(document).on("click", '.popover li.member', function(event) {
        _this.addToken(event, _this);
    });

    $(document).on("click", '.popover .project-members ul li a.remove', function(event) {
        _this.deleteToken(event, _this);
    });
},

showDropdown: function() {
    $(this.dropdown).css({
                position: "absolute",
                zindex: 999
            }).show();
},  

hideDropdown: function() {
    $(this.dropdown).hide().empty();
},

processInput: function(event, that) {
    var input = $(event.currentTarget),
    inputValue = input.val(), timeout;

    if(inputValue.length >= 1) {
        that.showSearchActivity();

        clearTimeout(timeout);
        timeout = setTimeout(function() {
            that.runSearch(inputValue.toLowerCase())
        }, 300);
    }
    else {
        that.hideDropdown();
    }
},

showSearchActivity: function() {
    $(this.dropdown).html('<p>Searching...</p>');
    this.showDropdown();
},

runSearch: function(query) {
    var results = $.grep(UW.Members, function (row) {
        return[row.name].toString().toLowerCase().indexOf(query.toLowerCase()) > -1;
    });

    this.populateDropdown(query, results);
},

populateDropdown: function(query, results) {
    var _this = this;

    if(results && results.length) {
        $(this.dropdown).empty();
        this.hideDropdown();

        $.each(results, function (index, value) {
            if(value.photo == "")
                var photo = UW.Constants.avatar;
            else
                var photo = value.photo;

            var template = '<li class="member" data-id="'+value.user_id+'">'+
                                '<div class="member-avatar pull-left"><img src="'+photo+'"></div>'+
                                '<div class="member-name pull-left">'+value.name+'</div>'+
                            '</li>';

            $(_this.dropdown).append(template);
        });

        this.showDropdown();
    }else {
        $(this.dropdown).html('<p>No results</p>');
        this.showDropdown();
    }
},

addToken: function(event, that) {

    var el = $(event.currentTarget);
    var id = el.attr('data-id');

    var user = {
        name: $(el).find('div.member-name').html(),
        photo: $(el).find('div.member-avatar').find('img').attr('src')
    };

    //update member list
    var members = this.options.container.find('div.project-members ul.member-avatars');


        if(members.find('li[data-id="'+id+'"]').length == 0) {

            members.append('<li data-id="'+id+'"><img src="'+user.photo+'" title="'+user.name+'"></li>');
        }

    //clear input
    $(that.input).val('');

    //Hide dropdown
    this.hideDropdown();
},

deleteToken: function(event, that) {

    event.preventDefault();
},

init: function() {
    this.renderTemplate();
    this.initPopover()
    this.delegateEvents();
}
UW.UI.ProjectMember={
下拉列表:“.项目成员选择下拉列表”,
输入:“.member搜索字段”,
选项:{
容器:$('.project member select'),
触发:“点击”,
明察尔:2
},
renderTemplate:function(){
变量模板=“”+
''+
''+
“
    ”+ ''+ “您可以邀请您的同事使用优步与您一起工作

    ”+ ''; this.options.container.append(模板); 归还这个; }, initPopover:function(){ var_this=这个; $(“.add member btn”).popover({ 是的, 位置:“底部”, 触发器:_this.options.trigger, 容器:“#窗口”, 内容:_this.build() }); }, 构建:函数(){ 返回$('.project member picker').html(); }, delegateEvents:函数(){ var_this=这个; $(document).on(“keydown”,'.popover.member搜索字段',函数(事件){ _this.processInput(事件,_this); }); $(文档).on(“单击”,'.popover li.member',函数(事件){ _this.addToken(事件,\u this); }); $(文档).on(“单击”,'.popover.project members ul li a.remove',函数(事件){ _this.deleteToken(事件,_this); }); }, 下拉列表:函数(){ $(this.dropdown).css({ 位置:“绝对”, zindex:999 }).show(); }, hideDropdown:函数(){ $(this.dropdown).hide().empty(); }, processInput:函数(事件,即){ 变量输入=$(event.currentTarget), inputValue=input.val(),超时; 如果(inputValue.length>=1){ showsearchavity(); clearTimeout(超时); timeout=setTimeout(函数(){ that.runSearch(inputValue.toLowerCase()) }, 300); } 否则{ hideDropdown(); } }, showSearchActivity:函数(){ $(this.dropdown).html(“搜索…

    ”); 这个。showDropdown(); }, runSearch:函数(查询){ var results=$.grep(UW.Members,函数(行){ 返回[row.name].toString().toLowerCase().indexOf(query.toLowerCase())>-1; }); 这个.populateDropdown(查询、结果); }, PopulatedDropDown:函数(查询、结果){ var_this=这个; if(results&&results.length){ $(this.dropdown).empty(); this.hideDropdown(); $.each(结果、函数(索引、值){ 如果(value.photo==“”) var photo=UW.Constants.avatar; 其他的 var photo=value.photo; var template='
  • '+ ''+ ''+值。名称+''值+ “
  • ”; $(\u this.dropdown).append(模板); }); 这个。showDropdown(); }否则{ $(this.dropdown).html(“无结果”

    ”; 这个。showDropdown(); } }, addToken:函数(事件,即){ var el=$(event.currentTarget); 变量id=el.attr('data-id'); 变量用户={ 名称:$(el).find('div.member-name').html(), 照片:$(el).find('div.member-avatar').find('img').attr('src')) }; //更新成员名单 var members=this.options.container.find('div.project-members-ul.member-avatars'); if(members.find('li[data id=“”+id+“]”]).length==0){ append(“
  • ”); } //清晰输入 $(that.input).val(“”); //隐藏下拉列表 this.hideDropdown(); }, deleteToken:函数(事件,即){ event.preventDefault(); }, init:function(){ this.renderTemplate(); this.initPopover() 这是delegateEvents(); }
    我知道我正在发布大量代码,无论如何,我正在从主干视图实例化
    UW.UI.ProjectMember
    类。 当点击
    $(“.add member btn”)
    元素触发popover时,第一次一切正常,但当再次点击元素隐藏popover时,chrome控制台显示此错误“未捕获范围错误:超过最大调用堆栈大小”。
    我可能做错了什么?如果有任何帮助,我们将不胜感激。

    在代码中的某个地方,您的代码在某种循环中调用了其他东西,导致了太多调用,以至于调用堆栈达到其极限,并发生了错误。很难准确地说出它在哪里,您应该设置一些断点,执行一些控制台日志等来尝试我看不出任何明显的递归,因此问题没有明显的答案。观察:在
    processInput()
    中,作为一个新声明的本地变量,
    timeout
    cleartimout(timeout)时总是未定义调用了
    。但我认为这不会解决问题。我已经仔细检查了我的代码,也找不到任何递归。