cflayout:包含在源文件时的getElementById不起作用

问题描述:

如果我使用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文件得到这个工作?或解释为什么这不起作用?

谢谢你的时间。

干杯 马克

(丹已经提供了答案,但只是为了显示它可以工作..)

这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

您需要使用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获取相关信息。编辑我的答案,以显示更多的信息。 –

它似乎并不正确,我认为需要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