0

次のような .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 から関数を呼び出すときに、最初にクリック時に関数 regionmap ( onclick="regionmap()) を呼び出すことですが、これはうまく機能しますが、html から関数 sendvariable を呼び出す必要があり、できません。これを解決する方法はありますか?

4

4 に答える 4

1

モジュラー パターンのバリエーションを使用して、外側のスコープから見えるようにすることができます。

function global() {
    function a() {};
    function b() {};

    // public api
    return {
        b: b
    }
}

var glob = global();
glob.b();

現在、内部b機能はグローバルにアクセスできますが、aまだプライベートです。

于 2013-06-26T13:39:42.467 に答える
0

関数 a と b は、グローバル関数スコープ (クロージャーと呼ばれる) の外側には隠されています。a および b 関数を含むグローバル関数 (オブジェクト) から何かを返すことができます。そこからこれらの関数を呼び出すことができます。

function global(){
    return{
        a: function(){
           // do something on a
        },
        b: function(){
           // do something on b
        }
    }
}

// Call like so:
global().a();
于 2013-06-26T13:37:50.257 に答える
0

window.b = bの後に追加してみてくださいfunction b()

于 2013-06-26T13:37:54.303 に答える