javascript - jQuery 将隐藏表单字段发布到 ColdFusion 查询

标签 javascript jquery coldfusion

我有一个带有 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>

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

最佳答案

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

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

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

来自 jQuery 文档:

"Each id value must be used only once within a document. If more than one element has been assigned the same ID, queries that use that ID will only select the first matched element in the DOM. This behavior should not be relied on, however; a document with more than one element using the same ID is invalid."

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

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

绑定(bind)您的提交处理程序。希望有帮助。

关于javascript - jQuery 将隐藏表单字段发布到 ColdFusion 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22925480/

相关文章:

javascript - 如何按类名在每个元素上使用函数?

javascript - HTML 页面顶部的 script 标签

javascript - html 标题(工具提示)在歌剧和 IE-6 中不起作用

coldfusion - 如何扩展 Coldfusion 中的 32 位限制?

java - 对自定义 Java 类使用 createObject 后页面停止处理

javascript - React Native 组件不能使用 super

javascript - 提取一年中一个月的字段数并将其导出为 d3.js 的 json

javascript - 验证在 HTML 中不起作用

javascript - 在 jquery 中为 json 数组生成 html 的标准方法

debugging - 如何记录 ColdFusion 应用程序中用于调试的所有方法调用