2011-08-15 33 views
0

如果我使用cflayout如下創建CF9佈局:cflayout:包含在源文件時的getElementById不起作用

<cfajaximport tags="cfform"> 
<cflayout type="border" name="example"> 
    <cflayoutarea position="center" name="_center" source="/example/center.cfm" /> 
</cflayout> 

,然後創建一個center.cfm文件包括:

<cfform name="myForm" id="myForm" action="post"> 
    <cfinput name="field1" type="text"><br/> 
</cfform> 

<script> 
    ThisForm = document.getElementById('myForm'); 
    alert(ThisForm.id); 
</script> 

我得到一個錯誤:

Error processing JavaScript in markup for element cf_layoutarea_center 

但如果我搬到center.cfm的內容到標籤(和刪除源paramete r)代碼按預期工作。任何人都可以告訴我如何使用center.cfm文件得到這個工作?或解釋爲什麼這不起作用?

謝謝你的時間。

乾杯 馬克

回答

2

(丹已經提供了答案,但只是爲了顯示它可以工作..)

這CF9下爲我工作得很好。我不確定爲什麼添加標籤不適合你。

test.cfm

<cfajaximport tags="cfform" /> 
<cflayout type="border" name="example"> 
    <cflayoutarea position="center" name="_center" source="myForm.cfm" /> 
</cflayout> 

myForm.cfm頁面

<html> 
<head> 
<script type="text/javascript"> 
    function myLoadFunction(){ 
     ThisForm = document.getElementById('myForm'); 
     alert(ThisForm.id); 
    } 
</script> 
</head> 
<body> 
<cfform name="myForm" id="myForm" action="post"> 
    <cfinput name="field1" type="text"><br/> 
</cfform> 
</body> 
</html> 
<cfset AjaxOnLoad("myLoadFunction") /> 
+0

謝謝你這樣做的工作。事實證明,我放置JS的地方是一個問題。我詳細說明了上述評論中的問題。我無法相信我在這上面浪費了多少時間......愚蠢,愚蠢,愚蠢:) – tHeSmUrF

1

您需要使用AjaxOnLoad ColdFusion的方法,以便一旦孩子網頁加載完成火了你的JavaScript。您需要定義你的函數類似這樣的center.cfm內:

<script> 
myLoadFunction = function(){ 
    ThisForm = document.getElementById('myForm'); 
    alert(ThisForm.id); 
} 
</script> 

然後,在任何地方center.cfm,添加下面的ColdFusion:

<cfset AjaxOnLoad("myLoadFunction") /> 

這應該儘快中心火myLoadFunction .cfm已在您的cflayout標記中完成加載。

編輯:Adobe LiveDocs有一個關於如何處理動態包含的JavaScript的部分。

相關部分:

All JavaScript function definitions on pages that you include dynamically, for example by using a bind expression, the ColdFusion.navigate function, or a form submission within a ColdFusion Ajax container tag, must have the following syntax format: functionName = function(arguments) {function body}

Function definitions that use the following format might not work: function functionName (arguments) {function body}

+0

嗨丹,感謝您的答覆,但沒有任何區別,因爲我仍然得到同樣的錯誤。我已經玩過沒有成功的AjaxOnLoad,但是我再次嘗試,以防萬一我犯了一個錯字或其他東西。 – tHeSmUrF

+0

作爲一項測試,我將其添加到頁面底部:Click here,甚至失敗並顯示錯誤(Object Expected)。如果我查看center.cfm,它按預期工作......只是不會在cflayout內工作。 – tHeSmUrF

+0

您是否使用過我以上的確切格式?查看http://livedocs.adobe.com/coldfusion/8/htmldocs/help.html?content=ajaxdata_11.html獲取相關信息。編輯我的答案,以顯示更多的信息。 –

1

它似乎並不正確,我認爲需要center.cfm文件有HTML,身體和身體標籤,所以我試過這個(Dan & Leigh's解決方案的組合):

主頁:

<html> 
<head> 
<script type="text/javascript"> 
    function myLoadFunction(){ 
     ThisForm = document.getElementById('myForm'); 
     alert(ThisForm.id); 
    } 
</script> 
<cfajaximport tags="cfform"> 
</head> 
<body> 
<cflayout type="border" name="example"> 
    <cflayoutarea position="center" name="_center" source="center.cfm" /> 
</cflayout> 
</body> 
</html> 

然後center.cfm很簡單:

<cfform name="myForm" id="myForm" action="post"> 
    <cfinput name="field1" type="text"><br/> 
</cfform> 
<cfset AjaxOnLoad("myLoadFunction") /> 

可正常工作,而我們不會發送正被通過AJAX加載另一個HTML標籤等內容,並添加到頁面。

+0

*(編輯)*是的,我也在考慮這種方法。但後來他提到在他的應用中放置不可行。儘管看起來有點奇怪,但文檔確實表示所有頁面都應該有適當的標籤以確保它們正常工作。 http://help.adobe.com/en_US/ColdFusion/9.0/Developing/WSc3ff6d0ea77859461172e0811cbec10e40-7fdd.html – Leigh

+0

@Scott。感謝您花時間回覆。原來我的問題與JS的立場有關。我上面寫了一個解釋。再次感謝。 – tHeSmUrF

相關問題