【问题标题】:Passing wrong values from Child page to Parent page.将错误值从子页面传递到父页面。
【发布时间】:2010-10-12 15:24:23
【问题描述】:

我有父页面和子弹出窗口页面 (empW.cfm)。子页面具有搜索字段,用于搜索和显示结果。我必须从三个子页面中选择一个搜索结果并将其填充到父页面上。

我无法将正确选择的值从子页面传递给父页面。

父页面:-

    <script type="text/javascript"  >

    function doSubmit() {
      var Emp = document.getElementById("emp");
      var getName = document.getElementById("getName");
      Emp.value = getName.value;
                }
           </script> 
</head>
<body>
<cfajaximport tags="cfform,cfwindow" scriptsrc="test.js">
<cfform action="Action.cfm" name="formE" id="formE" preserveData="true"  enctype="multipart/form-data" method="post" onsubmit="return validate(document.formE);"  >  
 <table >
    <tbody>    
            <tr><td  > Name*: </td><td><cfinput name="Name" id="Name"  type="text"  ></td></tr>          

             <tr><td > EMP:</td>
<td><input name="searchName" id="emp" onclick="ColdFusion.Window.create('w1','Title','empW.cfm')"></td>

    </tr>  
   </tbody>
 </table>
</cfform>

子/窗口页面:-

   <cfform name="formI" id="formI" preserveData="false" method="post">
 <table>
 <tr>SERACH:-  <input name="getName" id="getName" type="text" value="Find emp name" >
<cfif isdefined('form.getName')>
<tr>
<cfloop startrow="1" endrow="qry" query="qry">
   <cfoutput>Selected = #qry.getName# 
 <input name="Add" id="getNm" type="button" value="submit" onclick="document.getElementById('emp').value=document.getElementById('getName').value;">
</cfoutput>
</ cfloop>
tr>

</cfif>
 </table>
</cfform>  

示例:- 子页面上有 10 个搜索结果,我选择了第 8 个结果,但父页面仍然只填充第一个结果。每次选择搜索结果时都会出现这种情况。当我单击 Child 上的 Submit 按钮时,仅传递了 Search 结果的 First 值。

如何将精确选择的搜索结果从子页面传递到父页面。

【问题讨论】:

    标签: coldfusion popup


    【解决方案1】:

    两件事。您应该从 javascript 标记中删除 src。并将其移至第二组脚本标签。您的“getName”字段需要一个唯一值。现在,您将得到多个具有相同 ID 的 getName 字段。另外,附带说明一下,如果您使用 cfform,则无需导入它。

    【讨论】:

    • "现在您将得到多个具有相同 ID 的 getName 字段。"
    • 那么,您的搜索字段的 ID 为 getName 然后您的按钮 ID 为 getName 您已将所有这些设置为唯一并在 onClick 上更新了您的 javascript?
    • 我仍然认为您的所有字段都没有唯一的 ID。您需要将您的 ID 设置为 id="getName#qry.currentRow#" 或类似的东西。您还必须将其放入 javascript - document.getElementById('emp').value=document.getElementById('getName#qry.currentRow#').value;这会根据查询循环中的当前行为每个输入字段提供一个唯一 ID。
    • 您应该使用 script 标签链接到具有 src 属性的外部脚本,或者在标签中包含 JS,但不能同时使用两者。至少这是 W3C 的定义。因此,您只需使用两个脚本标记对而不是一个。
    • 很高兴它正在工作。请记住,您永远不应该为页面上的任何元素重复使用 id 字段。它应该始终是唯一的。您可以将 name 属性重用于无线电组等内容,但 ID 属性是唯一的。
    【解决方案2】:

    我发现了你的问题,让我解释一下你的问题:

    只要理解我的简单代码:

    <html>
        <head>
            <script>
                function transform(){
                    var x_elements = document.getElementsByName('x');
                    var y_elements = document.getElementsByName('y');
                    var i=0;
                    for (i=0; i<x_elements.length; i++)
                    {
                        y_elements[i].value = x_elements[i].value;
                    }
                }
            </script>
        </head>
    <body>
        <select name="x" id="x">
            <option value="1">one</option>
            <option value="2">two</option>
            <option value="3">three</option>
        </select>
        <select name="x" id="x">
            <option value="5">five</option>
            <option value="6">six</option>
            <option value="7">seven</option>
        </select>
        <br/>
        <select name="y" id="y">
            <option value="1">one</option>
            <option value="2">two</option>
            <option value="3">three</option>
        </select>
        <select name="y" id="y">
            <option value="5">five</option>
            <option value="6">six</option>
            <option value="7">seven</option>
        </select>
        <br/>
        <input type="button" value="Check" onclick="javascript:alert(document.getElementById('x').value);" />
        <br/>
        <input type="button" value="Transform" onclick="javascript:transform();" />
    </body>
    </html>
    

    我故意在两个select 标记中保留相同的名称和ID。 通过 id 访问元素时,您将只能访问具有相同 id 的第一个元素(例如检查按钮)。 所以你可以使用documents.getElementsByName()

    最后我还是建议尽量避免这种情况,并为每个元素保持id 的唯一性。您可以使用循环和计数器生成唯一 ID。例如名称 1、名称 2 等。

    要快速轻松地编写 javascript,请使用 jQuery

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多