如果我使用cflayout在CF9中创建布局,如下所示:
<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的内容移动到标记中(并删除源参数),代码将按预期工作。任何人都可以告诉我如何使用center.cfm文件让它工作?或解释为什么这不起作用?
感谢您的时间。
干杯 标记
答案 0 :(得分:2)
(Dan已经提供了答案。但只是为了表明它可以工作..)
根据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") />
答案 1 :(得分:1)
您需要使用AjaxOnLoad
ColdFusion方法,以便在子页面完成加载后触发您的javascript。你需要在center.cfm中定义你的函数:
<script>
myLoadFunction = function(){
ThisForm = document.getElementById('myForm');
alert(ThisForm.id);
}
</script>
然后,在center.cfm的任何地方,添加以下ColdFusion:
<cfset AjaxOnLoad("myLoadFunction") />
只要在您的myLoadFunction
代码中加载了center.cfm,就应该触发cflayout
。
编辑:Adobe LiveDocs有一节介绍如何处理动态包含的javascript。
相关部分:
动态包含的页面上的所有JavaScript函数定义(例如,通过使用绑定表达式,ColdFusion.navigate函数或ColdFusion Ajax容器标记内的表单提交)必须具有以下语法格式: functionName = function(arguments){function body}
使用以下格式的函数定义可能不起作用: function functionName(arguments){function body}
答案 2 :(得分:1)
我认为center.cfm文件需要有html,body和body标签,所以我尝试了这个(Dan&amp; 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>
然后center.cfm就是:
<cfform name="myForm" id="myForm" action="post">
<cfinput name="field1" type="text"><br/>
</cfform>
<cfset AjaxOnLoad("myLoadFunction") />
这是按预期工作的,我们不会在通过AJAX加载并添加到页面的内容中发送另一个html标记等。
答案 3 :(得分:0)
使用ID名称值调用函数参数。
我用ID值调用javascript函数,然后将ID值与getElementByID一起使用:
<script>
myLoadFunction = function(clickid){
ThisForm = document.getElementById(clickid);
alert(ThisForm.id);
}
</script>