我有一个.js文件,看起来像这样:
function regionmap () {
var width = 960,
height = 500,
centered;
var projection = d3.geo.albersUsa()
.scale(width)
.translate([width / 2, height / 2]);
var path = d3.geo.path()
.projection(projection);
var svg = d3.select("body").append("svg")
.attr("width", width)
.attr("height", height)
.attr("id","svg");
var states = svg.append("g")
.attr("id", "states")
d3.json("readme.json", function(json) {
d3.select("svg").selectAll("path")
.data(json.features)
.enter()
.append("path")
.attr("d", path)
.on("click", clicked)
.append("title")
.text(function(d) { return d.properties.name; });
});
listofnames = new Array();
listofnames.push("Regions:");
function clicked (d) {
var regionname = d.properties.name;
var currentclass = d3.select(this).attr("id") ;
if (currentclass == "active") {
d3.select(this).attr("id", "nonactive");
} else {
d3.select(this).attr("id", "active");
}
var contains;
var index;
for (var i = 0; i < listofnames.length; i++) {
if (regionname != listofnames[i]) {
contains = false;
} else {
contains = true;
index = i;
break;
}
}
if (contains == false){
listofnames.push(regionname);
} else if(contains == true){
listofnames.splice(index,1);
}
var x=document.getElementById("demo");
x.innerHTML=listofnames;
}
function sendingvariable (){
window.location.href = "../php/fileregions.php?name=" + listofnames;
}
}
问题是当从html调用函数时,我首先在click(onclick =&#34; regionmap())上调用函数regionmap,这很好用。但是,我需要从html调用函数sendingvariable,我无法做到。 有什么方法可以解决这个问题吗?
答案 0 :(得分:1)
您可以使用模块化模式的变体使外部范围可见:
function global() {
function a() {};
function b() {};
// public api
return {
b: b
}
}
var glob = global();
glob.b();
现在,内部b
功能可全局访问,而a
仍然是私有的。
答案 1 :(得分:0)
函数a和b对全局函数范围之外的任何东西都隐藏(称为closure)。您可以从包含a和b函数的全局函数(对象)返回一些内容。然后,您可以从那里调用这些函数:
function global(){
return{
a: function(){
// do something on a
},
b: function(){
// do something on b
}
}
}
// Call like so:
global().a();
答案 2 :(得分:0)
尝试在window.b = b
之后添加function b()
。
答案 3 :(得分:0)
如果你需要调用一个没有来自global()局部变量的东西的(),你可以将它声明为单独的函数。 如果你需要OOP模型,你应该从global创建对象,然后调用a()。声明也必须看:
function global() {
var a = function() { ... }
}
然后你可以这样称呼它:
var obj = new global();
obj.a();
很抱歉,如果我没有理解你的问题。