【问题标题】:Trouble safeguarding form submission麻烦保护表单提交
【发布时间】:2013-01-08 07:09:37
【问题描述】:

我有一个 HTML 表,其中的行表示数据库记录。最后一列的单元格有一个带有提交按钮的表单,用于删除数据库记录。表单具有唯一的 ID,但其中的字段只有名称,并且每个表单的名称都相同。

我有一个简单的用户确认,但我想确保表单不只是由于 Javascript 未运行(错误或其他原因)而提交。所以我想我会将其中一个隐藏字段的值留空并在提交时填写(处理脚本需要的字段但无论选择哪条记录都是相同的值,所以很容易分配)。这是我尝试过的:

$(document).ready(function() {
  $("form[id^='deltrans']").submit(function(e) {
    if (confirm("Are you sure you want to delete this transaction?")) {
      $(this).find("[name='uri']").val("my value...");
    } else {
      e.preventDefault();
    }
  });
});

但使用 $(this).find() 似乎不起作用 - Firebug 说 $(this).find("[name='uri']").val() 未定义。如果出现 JS 问题,您能否看到我的错误,或者就如何防止意外提交表单有更好、更简单的建议?

编辑:根据 cmets 中的请求,这是相关的 HTML:

<form method="post" id="deltrans<? echo $row->TransID; ?>" action="processor.php">
  <td class="button-in-table">
    <input type="hidden" name="tid" value="<? echo $row->TransID; ?>">
    <input type="hidden" name="uri" value="">
    <input type="submit" name="deltrans" value="Del">
  </td>
</form>

【问题讨论】:

  • .filter() 是否比 .find() 工作得更好?
  • 请显示 HTML。您的表单中不得有名称为uri 的DOM 元素。 $(this) 应该给你&lt;form&gt; 标签。
  • 编辑添加 HTML - 抱歉我第一次没有这样做。
  • 对此还有其他想法吗?目前我的代码处于如果 JS 未运行或出现错误时会发生删除的状态,但肯定有一种标准的方式可以让人们对表单进行编码,这样就不会发生这种情况。

标签: jquery forms


【解决方案1】:

如果uri 输入在表单内,您不能使用:

$(this).children('[name^=uri]').val("my value...");

全文:

$(document).ready(function() {
  $("form[id^='deltrans']").submit(function(e) {
   if (confirm("Are you sure you want to delete this transaction?")) {
      $(this).children('[name^=uri]').val("my value...");
   } else {
      e.preventDefault();
   }
  });
});

【讨论】:

  • children() 是我先尝试的,后来发现其实是孙子,所以改成了 find()。
猜你喜欢
  • 1970-01-01
  • 2019-06-14
  • 1970-01-01
  • 2011-08-20
  • 1970-01-01
  • 1970-01-01
  • 2012-03-26
  • 2016-08-06
  • 1970-01-01
相关资源
最近更新 更多