我有以下代码,并且我试图在外部访问selectedBrand
var,以便在可能的其他地方使用它
var selectedBrand;
var brand_sel = d3.select('select')
.on("change",function(b) {
selectedBrand = d3.select("#brand").node().value;
});
console.log(selectedBrand)
当我尝试selectedBrand
时,我得到undefined
的结果。
我几乎尝试了所有我了解的事情,但没有成功
非常感谢您的帮助
答案 0 :(得分:0)
您正尝试立即记录它的值,但是直到执行更改处理程序之后,它才会保持未定义状态:
下面的帮助说明吗?
var selectedBrand;
var brand_sel = d3.select('select')
.on("change",function(b){
selectedBrand = d3.select("#brand").node().value;
run();
})
var run = function() { console.log(selectedBranch); } // <- this runs after you've defined the value because you've called `run()` in your change handler
console.log(selectedBrand); // <- this runs first, while the value is undefined
这感觉就像是How do I return the response from an asynchronous call?岁的人
答案 1 :(得分:0)
只需调用您的函数brand_sel()
。
因为现在您只定义了它,但从未真正调用过它,因此它从未触发过,selectedBrand
仍未定义。
这也是我不想在代码中处理的一些肮脏的范围。通常,您正在执行的是错误的模式,这会导致错误。开始使用const / let
来避免范围问题,并且通常尝试使作用域保持整洁-这很容易成为function return
,而不是通过函数调用直接更改变量。
至少,在代码顶部的"use strict";
可能是个好主意。
总的来说,听起来并不逊色,您似乎正在开发一些“不太好”的做法。网络上甚至书籍都有很多好的教程,它们确实教会了JS“正确的方法”。我知道这听起来可能像是在抨击您,但请相信我,从长远来看,如果您不想花3个小时进行调试,为什么您的值不能在循环中正确地更新以及什么都没更新,这是值得的。 / em>
答案 2 :(得分:0)
首先感谢您的重播。 我对javascript很陌生,正在边做边学。可能我完全误解了js逻辑。
无论如何,可能我会分享错误的请求,希望它可以解决我的问题。 回到开始时的问题。
假设我有一个这样的变量
var filteredMedia =nest1.filter(function(d) {
return d.key == brand_sel})[0]
其中brand_sel
必须在页面加载和更改时都进行更新。
brand_sel
是下拉菜单中所选选项的值。
使用此代码
function update() {
var brand_sel = d3.select("#brand").node().value
return brand_sel;
}
var brand_sel = update();
console.log(update())
所有内容都可以在页面加载时工作。
现在,我正尝试通过以下方式在更改时运行update
函数,但是当然,我仍然缺少了解东西的方法
d3.select('select').on("change", function(){
update();
});