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") />
您需要使用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}
嗨丹,感谢您的答复,但没有任何区别,因为我仍然得到同样的错误。我已经玩过没有成功的AjaxOnLoad,但是我再次尝试,以防万一我犯了一个错字或其他东西。 – tHeSmUrF
作为一项测试,我将其添加到页面底部:Click here,甚至失败并显示错误(Object Expected)。如果我查看center.cfm,它按预期工作......只是不会在cflayout内工作。 – tHeSmUrF
您是否使用过我以上的确切格式?查看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标签等内容,并添加到页面。
谢谢你这样做的工作。事实证明,我放置JS的地方是一个问题。我详细说明了上述评论中的问题。我无法相信我在这上面浪费了多少时间......愚蠢,愚蠢,愚蠢:) – tHeSmUrF