日期:2014-05-16  浏览次数:20474 次

使用amChart和amStock的js的交互问题

以前,使用过一段时间amChart和amStock。今天,一个同事问我:他在看例子中的javascrip _control这个js交互操作的例子,怎么也不能正确运行。

打开一运行,图像正常。但是操作js就报:flashMoive元素未定义的错误!!!

flashMoive怎么会没有定义呢?打开代码检测,很快发现

// <![CDATA[       
var so = new SWFObject("amstock.swf", "stock_chart", "800", "600", "8", "#FFFFFF");
so.addVariable("path", "");
so.addVariable("chart_id", "stock_chart");
//so.addVariable("settings_file", encodeURIComponent("amstock_settings.xml"));
so.addVariable("settings_file", escapeCN("a.xml"));
so.write("flashcontent");
// ]]>


function escapeCN(str) {
    var eStr = ""
    var reg = /[^\x00-\xff]/
    var s = str.split('')
    for(var c=0; c<s.length; c++) {
        if(reg.test(s[c])) {
            eStr += s[c]
        }
        else {
            eStr += escape(s[c])
        }
    }
    return eStr
}

?

上面这段代码加载插件,然后会自动调用amChartInited这个方法:amChartInited方法代码如下

//////////////////////////////////////////////////////////////////////////////////////////
// Functions that are called by the chart ////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////
     
// CHART INITED //////////////////////////////////////////////////////////////////////////   
// amChartInited(chart_id)
// This function is called when the chart is fully loaded and initialized.
function amChartInited(chart_id){
  // get the flash object into "flashMovie" variable  
  flashMovie = document.getElementById(chart_id);
  // tell the field with id "chartfinished" that this chart was initialized
  document.getElementById("chartfinished").value = chart_id;          
}  
?

?

从这段代码可以发现:flashMovie是在这段代码中声明的!

加载这个过程应该就是问题症结所在:IE7等浏览器加载元素时,js操作还没有加载成功的元素的时候进行操作出现的问题。

解决方式:把所有的js放在页面元素之后。

?

郁闷一把:scrip t被javaeye屏蔽了,~~我的天,以后javascrip t这个单词都不能用了!!!BS一把

1 楼 qinglintan 2010-09-01  
<script>