Coldfusion cflayout:getElementById不';如果包含在源文件中,则无法工作
如果我使用cflayout在CF9中创建布局,如下所示:Coldfusion cflayout:getElementById不';如果包含在源文件中,则无法工作,coldfusion,Coldfusion,如果我使用cflayout在CF9中创建布局,如下所示: <cfajaximport tags="cfform"> <cflayout type="border" name="example"> <cflayoutarea position="center" name="_center" source="/example/center.cfm" /> </cflayout> 但是,如果我将center.cfm的内容移动到标记中(并删除源参
<cfajaximport tags="cfform">
<cflayout type="border" name="example">
<cflayoutarea position="center" name="_center" source="/example/center.cfm" />
</cflayout>
但是,如果我将center.cfm的内容移动到标记中(并删除源参数),代码将按预期工作。有人能告诉我如何使用center.cfm文件使其工作吗?或者解释为什么这不起作用
谢谢你抽出时间
干杯
标记您需要使用
AjaxOnLoad
ColdFusion方法,以便在子页面完成加载后启动javascript。您需要在center.cfm中定义如下函数:
<script>
myLoadFunction = function(){
ThisForm = document.getElementById('myForm');
alert(ThisForm.id);
}
</script>
myLoadFunction=函数(){
ThisForm=document.getElementById('myForm');
警报(ThisForm.id);
}
然后,在center.cfm中的任意位置添加以下ColdFusion:
<cfset AjaxOnLoad("myLoadFunction") />
当center.cfm在cflayout
标记中完成加载后,应立即启动myLoadFunction
编辑:有一节介绍如何处理动态包含的javascript
有关章节:
页面上动态包含的所有JavaScript函数定义(例如通过使用绑定表达式、ColdFusion.navigate函数或ColdFusion Ajax容器标记中的表单提交)必须具有以下语法格式:
functionName=函数(参数){函数体}
使用以下格式的函数定义可能不起作用:
函数函数名(参数){function body}
您需要使用
AjaxOnLoad
ColdFusion方法,以便在子页面完成加载后启动javascript。您需要在center.cfm中定义如下函数:
<script>
myLoadFunction = function(){
ThisForm = document.getElementById('myForm');
alert(ThisForm.id);
}
</script>
myLoadFunction=函数(){
ThisForm=document.getElementById('myForm');
警报(ThisForm.id);
}
然后,在center.cfm中的任意位置添加以下ColdFusion:
<cfset AjaxOnLoad("myLoadFunction") />
当center.cfm在cflayout
标记中完成加载后,应立即启动myLoadFunction
编辑:有一节介绍如何处理动态包含的javascript
有关章节:
页面上动态包含的所有JavaScript函数定义(例如通过使用绑定表达式、ColdFusion.navigate函数或ColdFusion Ajax容器标记中的表单提交)必须具有以下语法格式:
functionName=函数(参数){函数体}
使用以下格式的函数定义可能不起作用:
函数函数名(参数){function body}
(丹已经给出了答案,但只是为了证明它能起作用……)
在CF9下,这对我来说效果很好。我不知道为什么添加标签对您不起作用
测试.cfm
<cfajaximport tags="cfform" />
<cflayout type="border" name="example">
<cflayoutarea position="center" name="_center" source="myForm.cfm" />
</cflayout>
<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") />
myForm.cfm
<cfajaximport tags="cfform" />
<cflayout type="border" name="example">
<cflayoutarea position="center" name="_center" source="myForm.cfm" />
</cflayout>
<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") />
函数myLoadFunction(){
ThisForm=document.getElementById('myForm');
警报(ThisForm.id);
}
(丹已经提供了答案。但只是为了证明它可以工作….)
在CF9下,这对我来说效果很好。我不知道为什么添加标签对您不起作用
测试.cfm
<cfajaximport tags="cfform" />
<cflayout type="border" name="example">
<cflayoutarea position="center" name="_center" source="myForm.cfm" />
</cflayout>
<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") />
myForm.cfm
<cfajaximport tags="cfform" />
<cflayout type="border" name="example">
<cflayoutarea position="center" name="_center" source="myForm.cfm" />
</cflayout>
<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") />
函数myLoadFunction(){
ThisForm=document.getElementById('myForm');
警报(ThisForm.id);
}
我觉得center.cfm文件需要html、body和body标记是不对的,所以我尝试了这个(Dan&Leigh解决方案的组合):
主页:
<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>
函数myLoadFunction(){
ThisForm=document.getElementById('myForm');
警报(ThisForm.id);
}
然后center.cfm就是:
<cfform name="myForm" id="myForm" action="post">
<cfinput name="field1" type="text"><br/>
</cfform>
<cfset AjaxOnLoad("myLoadFunction") />
这与预期一样有效,我们不会在通过AJAX加载并添加到页面的内容中发送另一个html标记等。我觉得center.cfm文件需要html、body和body标记是不对的,所以我尝试了这一点(Dan&Leigh的解决方案的组合): 主页:
<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>
函数myLoadFunction(){
ThisForm=document.getElementById('myForm');
警报(ThisForm.id);
}
然后center.cfm就是:
<cfform name="myForm" id="myForm" action="post">
<cfinput name="field1" type="text"><br/>
</cfform>
<cfset AjaxOnLoad("myLoadFunction") />
这与预期的一样有效,我们不会在通过AJAX加载并添加到页面的内容中发送另一个html标记等。使用ID name值调用函数参数 我使用ID值调用javascript函数,然后使用ID值和getElementByID:
myLoadFunction=函数(单击ID){
ThisForm=document.getElementById(clickid);
警报(ThisForm.id);
}
使用ID名称值调用函数参数
我使用ID值调用javascript函数,然后使用ID值和getElementByID:
myLoadFunction=函数(单击ID){
ThisForm=document.getElementById(clickid);
警报(ThisForm.id);
}
Hi Dan,谢谢你的回复,但这没有任何区别,因为我仍然会遇到同样的错误。我已经尝试过添加AjaxOnLoad,但没有成功,但我又尝试了一次,以防我输入了一个拼写错误或其他什么。作为测试,我将此添加到页面底部:即使这样也会失败,并出现错误(预期对象)。如果我查看center.cfm,它会按预期工作…只是在cflayout中不起作用。您使用的是我上面使用的格式吗?查一下这方面的信息。编辑我的答案以显示有关该问题的更多信息。您可能需要在center.cfm中添加适当的和标记才能使其正常工作。(函数签名对CF9不重要)@Leigh。我也这么做了。包括索引和中心文件,只是索引,只是中心等。最后我还将上述问题通过电子邮件发送给Ray Camden,看看他是否可以解释,他也无法让它按预期工作。成功地将脚本移到了索引文件中,但这行不通