【问题标题】:jQuery Post Hidden Form Field to ColdFusion QueryjQuery 将隐藏表单字段发布到 ColdFusion 查询
【发布时间】:2014-04-08 00:28:04
【问题描述】:

我有一个带有 2 个选项卡的 jQuery 选项卡元素。每个选项卡上都有一个表单,分别有自己的操作页面。

我还有 JavaScript 代码可以防止默认的页面刷新并将数据发布到我的操作页面。

我表单上的第二个选项卡有多个由 CFLoop 创建的独特表单元素。我使用它从数据库中删除特定记录。但是当我提交表单时,我的操作页面上的查询会引发错误。我可以在 Firebug 中看到错误,但在屏幕上看不到(如果有人知道更详细地查看 ColdFusion 错误代码的方法,那将很有帮助):

500(执行数据库查询时出错。)

我将记录 ID 以隐藏表单字段的形式传递给操作页上的查询。我需要用 jQuery 来做这件事吗?感谢您的帮助。

表格代码:

<cfloop query="get_trips">
  <tr class="vehicle-log-table">
    <td class="vehicle-log-table">#DateFormat(get_trips._date, "mm-dd-yyyy")#</td>
    <td class="vehicle-log-table"><div align="center">#get_trips.total_mileage#</div></td>
    <td class="vehicle-log-table"><div align="center">#get_trips.expenses#</div></td>
    <td class="vehicle-log-table">
      <div align="right"> 
        <form class="deleteMileageForm" id="deletemileage#get_trips.currentRow#" method="post">
          <input class="vehicle-log-form" type="submit" id="submit2" name="submi2" value="Delete">
          <input type="hidden" id="hidden" name="hidden" value="#get_trips.id#">
        </form>           
      </div><br />

      <span class="errorTab2" style="display:none"> <font color="##FF0000"> <strong>Trip Not Deleted</strong></font></span>
      <span class="successTab2" style="display:none">
        <font color="##00FF00"> 
          <strong>Trip Deleted Successfully</strong>
        </font>
      </span>  
    </td>
  </tr>
</cfloop>

jQuery 代码:

<script>
  $(document).ready(function () {
    //Submit form to add record.
    $('#addmileage').submit(function (e) {          
      e.preventDefault();
      $.ajax({
        data: $('#addmileage').serialize(),
        type:'POST',
        url:'actionpages/add_trip.cfm?ticketid=<cfoutput>#url.ticketid#</cfoutput>',
        success: function(){
          $('.success').fadeIn(200).show();
          $('.error').fadeOut(200).hide();
        }
      });
    });


    $('.deleteMileageForm').submit(function (e) {          
      e.preventDefault();
      $.ajax({
        data: $('.deleteMileageForm').serialize(),
        type:'POST',
        url:'actionpages/delete_trip.cfm',
        success: function(){
          $('.successTab2').fadeIn(200).show();
          $('.errorTab2').fadeOut(200).hide();
        }
      });
    });     
  });    
</script>

ColdFusion 查询

<!---Delete Trip --->                          
<cfoutput>
  <cfquery name="deleteTrips" datasource="#datasource#">
    delete from vehicle_log
    where ID = #form.hidden#
  </cfquery>
</cfoutput>

有人可以帮忙吗?非常感激。

【问题讨论】:

  • 您需要使您的 ID 独一无二。
  • 似乎也没有任何理由使用 cfform。常规表单应该可以正常工作。
  • 我改成了
    标签,没有效果。另外,如果表单元素是从 cfloop 创建的,那么 ID 怎么可能是唯一的?
  • get_trips.current_row 附加到您的 ID。如果 JavaScript ID 不是唯一的,你会遇到很糟糕的情况
  • 我对 cfform 的观点正是如此,它在大多数情况下都毫无用处。

标签: javascript jquery coldfusion


【解决方案1】:

正如马特所评论的那样,问题在于第二个选项卡上的所有表单都具有相同的 ID(删除里程)。因此,当您尝试使用

绑定到提交事件处理程序时
$('#deletemileage').submit(function (e) { ... } );

您实际上只是绑定了 jQuery 找到的与您的选择器匹配的第一个 DOM 元素。 ID 为 deletemileage 的第一个 DOM 元素是您在 tab2 上的第一个表单,因此它被正确绑定,其余的则根本不被绑定。

来自 jQuery 文档:

"每个 id 值在一个文档中只能使用一次。如果超过 一个元素被分配了相同的 ID,使用该 ID 的查询 只会选择 DOM 中第一个匹配的元素。这种行为 然而,不应依赖;包含多个文件的文档 使用相同 ID 的元素无效。”

所以,有两件事。首先,正如马特建议的那样,定义您的 ID,例如 id="deletemileage#get_trips.current_row#" 以使 HTML 有效。其次,如果您想将提交事件绑定到所有表单,请给它们一个类似 class="deleteMileageForm" 的类。然后使用

$(".deleteMileageForm").submit(function(e) { ... } );

绑定您的提交处理程序。希望对您有所帮助。

【讨论】:

  • 好吧,这肯定是有道理的。我进行了建议的更改,并解决了我遇到的 JQuery 问题。 (我已经通过更改更新了原始问题中的代码)。但是我的操作页面中的查询现在没有执行。我看不到确切的错误,只是萤火虫中的消息说“500(执行数据库查询时出错。)”。我假设它与我传递的隐藏表单字段有关,以便查询知道要删除哪条记录。我现在需要对那个表单字段做些什么不同的事情吗?我应该以不同的方式传递该变量吗?
  • 更新:在我的表单上更改:enctype="application/x-www-form-urlencoded" 后,我现在收到“500(表单中未定义元素隐藏)”错误消息。跨度>
  • 发布了一个新问题,他们解决了我的问题。 stackoverflow.com/a/22943794/3199593
  • 嗯,我确实回答了你原来的问题。我猜我们之间有点时差。我在澳大利亚,所以我现在正在阅读后续内容。
  • 是的,你做到了。这当然值得赞赏。我刚刚进行了一些需要帮助的后续行动。再次感谢。在我度过这个难关之后,我注意到标签在 jquery 发布后没有刷新,所以用户不太知道帖子是否成功。有没有办法让标签在成功后更新?我还为此发布了一个问题。 stackoverflow.com/q/22946298/3199593
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-20
  • 2012-03-04
  • 2014-03-29
  • 1970-01-01
  • 2013-07-23
  • 1970-01-01
相关资源
最近更新 更多