所以我有全局变量
var INSIDE_GLOBAL = {} ;
INSIDE_GLOBAL.current_search = get_new_current_search();
function get_new_current_search() {
return {
stack:[],
search_options: {
keywords: ""
},
};
}
然后,我设置处理程序,用于点击手风琴中的不同div部分。这会为手风琴添加一个新的部分,使其成为当前查看的部分,并为具有相同功能的下一部分设置点击处理程序(setup_search_click_handlers)。
function setup_search_click_handlers() {
$('.search_option').unbind("click");
$('.search_option').bind("click", function(e) {
var new_sub_group = $(this).attr('id');
$("#new_search_panel").bind("accordionchange", function(event, ui) {
$("#new_search_panel").unbind("accordionchange");
//push new section onto the current searches
INSIDE_GLOBAL.current_search.stack.push(new_sub_group);
/* pseudo code */
accordion_add_section_and_select_that_section( with_callback: setup_search_click_handlers );
});
$("#new_search_panel").accordion("activate",-1); //Collapse the accordion, calls the newly binded change
});
}
在第一次单击结束时,INSIDE_GLOBAL.current_search.stack中有一个元素; 但是,当下一个单击事件发生并且绑定了绑定函数时,INSIDE_GLOBAL.current_search.stack将变为空。无法弄清楚原因。
我假设它与不同的回调范围有关,但实际上并不确定。
在firebug中,我可以看到Window INSIDE_GLOBAL正确更改,然后被“重置”到堆栈数组再次为空的位置
答案 0 :(得分:0)
刚想通了。有意义的是,我会花费数小时试图找出问题,然后在发布后发现它。
我刚刚将堆栈数组添加到我的代码中,并将一些在方法中传递的索引更改为仅使用stack.length字段。
我在其他地方有一个绑定,只要手风琴最小化就调用一个函数。当用户点击手风琴中的上一部分(在搜索中向后)时,可以使用此选项。它会检查一些参数以确保是这种情况,并在用户单击之后删除手风琴的各个部分。在执行此操作时,它还调用stack.pop()以使后端数据保持最新。
通过使用索引变量更改为长度变量,第一次手风琴最小化时,此检查会错误地传递并将刚刚变量弹出到堆栈...
这是好奇的人的代码的一部分
function setup_return_to_previous_handlers() {
var event_function = function(event, ui) {
var active_index = $("#new_search_panel").accordion( "option", "active" );
var index = INSIDE_GLOBAL.current_search.stack.length; //BUG here: needs to be length-1;
//alert("accord_change: active:"+active_index+" index:"+index);
if ( typeof active_index==="number" && //Filter's active === false, if user clicked last section
active_index >= 0 && //Filters refreshes
active_index != index ) { //User clicked previous section
$("#new_search_panel").unbind("accordionchange");
bind_search_buttons();
//alert("inside");
for ( ; index > active_index; --index) {
/* remove accordion sections */
INSIDE_GLOBAL.current_search.stack.pop(); //Bug: Shouldn't have been called
}
}
};
$("#new_search_panel").unbind("accordionchange");
$("#new_search_panel").bind("accordionchange", event_function);
}