gpt4 book ai didi

javascript全局变量在下一次事件调用时返回到以前的状态

转载 作者:行者123 更新时间:2023-11-30 06:45:55 25 4
gpt4 key购买 nike

所以我有全局变量

var INSIDE_GLOBAL = {} ;
INSIDE_GLOBAL.current_search = get_new_current_search();

function get_new_current_search() {

return {
stack:[],
search_options: {
keywords: ""
},
};
}

然后,我设置处理程序以单击 Accordion 中的不同 div 部分。这会向 Accordion 添加一个新部分,使其成为当前查看的部分,并使用相同的功能 (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里面有一个元素;然而,当下一个点击事件发生并调用绑定(bind)函数时,INSIDE_GLOBAL.current_search.stack 变回空。想不通为什么。

我假设它与不同回调的范围有关,但真的不确定。

在 firebug 中,我可以看到 Window INSIDE_GLOBAL 正确更改,然后再次“重置”到堆栈数组为空的位置

最佳答案

刚刚想通了。有道理我会花几个小时试图找出问题,然后在此处发布后立即找到它。

我刚刚将堆栈数组添加到我的代码中,并将一些在方法中传递的索引更改为仅使用 stack.length 字段。

我在别处有一个绑定(bind),它在 Accordion 最小化时调用一个函数。当此人单击 Accordion 中的前一部分(在搜索中向后)时使用。它会检查一些参数以确保是这种情况,并在用户单击后删除 Accordion 部分。在执行此操作时,它还会调用 stack.pop() 以使后端数据保持最新。

通过从使用索引变量更改为长度变量,第一次最小化 Accordion 时,此检查将错误地通过并将刚刚的变量弹出到堆栈...

这是给好奇的人的部分代码

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);
}

关于javascript全局变量在下一次事件调用时返回到以前的状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6946419/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com