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

时间:2011-08-15 05:31:11

标签: coldfusion

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

感谢您的时间。

干杯 标记

4 个答案:

答案 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>