2012-10-15 32 views
0

其实我的想法如下:我有一个div标签,它在脚本标签内显示名为“afficher_general()”的函数的结果,以及一个调用名为“ Ajouter_general()”这是应该改变的函数中的字符串‘afficher_general()’更改javascript函数的代码

var general = document.getElementById("general"); 
general.innerHTML = general.innerHTML.replace('//WRITE', ch); 

按钮如下:

<input type="button" value="ajouter au graphe general" id="id1" onClick="Ajouter_general();afficher_general();" /> 

但是,这似乎并没有工作,因为我已经被告知一个脚本只加载一次,并且不能改变。那么有没有解决办法?提前致谢。

所以我会添加包含的功能。其实我正在与Amcharts合作。功能afficher_generalis如下:

<script name="general" id="general" type="text/javascript"> 
    function afficher_general() 
    { 

        chart = new AmCharts.AmSerialChart(); 
        chart.dataProvider = chartData; 
        chart.categoryField = "country"; 
        chart.startDuration = 1;     
        // WRITE 
        chart.write("chartContainer"); 


    } 
</script> 

,而不是评论//写我想要添加的代码每次按下按钮。该函数如下:

function Ajouter_general(ind){ 
var ch=""; 
var couleur = getSelectValueId("background-color"+ind); 
var transparence = getSelectValueId("transparence"+ind); 
var type = get_radio_value_type(ind); 
var balloon = getSelectValueId("balloon-color"+ind); 
if(type == "column") 
       { 
       ch=ch+"var graph"+ind+" = new AmCharts.AmGraph();"; 
           ch=ch+"graph"+ind+".valueField = "+"visits"+";" 
       ch=ch+"graph"+ind+".balloonColor = "+balloon+";"; 
           ch=ch+"graph"+ind+".type = "+type+";"; 
           ch=ch+"graph"+ind+".fillAlphas = "+transparence+";"; 
       ch=ch+"graph"+ind+".fillColors = ["+couleur+"];"; 
       ch=ch+"graph"+ind+".lineColor = ["+couleur+"];"; 
       ch=ch+"chart.addGraph(graph"+ind+");"; 
       ch=ch+"// WRITE"; 
       } 
var general = document.getElementById("general"); 
general.innerHTML = general.innerHTML.replace('//WRITE', ch); 
} 

因为Amcharts使用脚本来绘制图表内的曲线图,我想能够动态地添加这些图everythime按钮被按下。

+0

你为什么要改变JS函数的**文本**?首先,它不会工作,因为JS源被解析一次并存储在内存中。但大多数情况下,为什么你不能只使用一个变量,并点击你的按钮更新该变量? –

+0

因为我想要添加的字符串实际上是一个js代码,需要在脚本标记内执行。 –

+0

我仍然期望有一种方法可以使函数更具动态性,而不必实际覆盖它。你可以发布这个函数(或者它的一个简化版本)来看看这里的人是否可以提出其他的选择? –

回答

0

如果你真的需要改变一个函数的定义,你总是可以只重新定义它(函数只是对象分配到变量):

var Ajouter_general = function() { 
    // redefine the afficher_general function 
    afficher_general = function() { 
     // change it to whatever you want 
    }; 
}; 

话虽这么说,这通常是一个不好的做法和使用函数参数可以更好地完成相同的功能。

+0

这似乎不起作用 –

+0

它应该工作。再次,你可以显示一些代码? –

+0

有!我已经添加了属于这些函数的代码。 –