0

我正在使用 required 来显示所需的表单字段。我听说这是 chrome 中的一个错误,但想知道是否有解决方法。我的代码发布在下面。

echo "<br><br><input class=button id=submitbutton type=submit value=\"".pcrtlang("Submit     Service Request")."\" onclick=\"this.disabled=true;this.value='".pcrtlang("Sending Request")."...'; this.form.submit();\">";

我相信如果您删除 onlick 功能,它会起作用,但是如果用户双击提交按钮,它会提交两次,您就会遇到问题。

我使用 javascript 禁用提交按钮以防止重复提交,然后使用 javascript 使表单提交。

4

2 回答 2

1

问题是每次都会调用 onclick(即使它不会被浏览器提交)。您可以通过将 onclick 更改为 onsubmit ( JSFiddle )来修复

 <input class="button" id="submitbutton" type="submit" value="Submit" onsubmit="this.disabled=true;this.value='Sending Request';">
于 2013-07-18T19:38:19.883 回答
0

我很想绑定到submit包含表单的事件,并使用 _.debounce中的概念来限制提交的重复:

jQuery:

// prevent the user from submitting the form twice within a second
var DELAY = 1000;
var lastSubmit = null;

$("#form").submit(function(e) {
  if (lastSubmit === null || Date.now() - lastSubmit > DELAY)
    return true;
  // two ways to prevent the default action
  e.preventDefault();
  return false;
});

或者直接使用 JavaScript:

// prevent the user from submitting the form twice within a second
var DELAY = 1000;
var lastSubmit = null;

document.getElementById('form').addEventListener('submit', function(e) {
  if (lastSubmit === null || Date.now() - lastSubmit > DELAY)
    return true;
  // two ways to prevent the default action
  e.preventDefault();
  return false;
});

您可以调整DELAY以满足您的要求,或处理未能重置禁用状态的表单提交。

如果要求使用钩子的属性,则:

echo "<form onsubmit=\"var stop = lastSubmit && Date.now() - lastSubmit <= 1000;stop && e.preventDefault();return !stop;\">";
于 2013-07-18T19:47:45.290 回答