JQuery 的 ajaxForm 在点击时提交,但在空间上不提交

发布于 2024-11-24 00:33:57 字数 619 浏览 1 评论 0原文

JQuery 众所周知且深受喜爱的插件 ajaxForm 修改ajax提交的表单。

我已经让它正常工作,包括回调函数。我发现问题在于,在很多情况下,我不是按 Enter 键,而是按 tab space 组合。这在填写文本区域时很有用,或者只是因为它比使用鼠标更快。

在我的实现中,单击“提交”按钮可以按预期工作,但单击“制表符”、“空格” - 不会执行任何操作。表单未提交,页面未刷新。

我不知道是什么原因导致这个问题,或者我将如何调试它。请帮忙:)

浏览器信息
Ubuntu 10.04
FireFox 3.6.18 失败
google-chrome 12.0.742.112 失败

Windows 7
Firefox 3.6.15 失败
Chrome 12.0.742.112 失败
Internet Explorer 9.0.8080.16413 - 按预期工作。

JQuery's well known and loved plugin ajaxForm modifies the form to be submitted by ajax.

I've gotten this to work correctly, including callback functions. What I found broken is that in many cases instead of hitting enter, I hit tab space combination. This is useful in cases of filling out textareas, or just because it's faster than reaching for the mouse.

In my implementation clicking the submit button works as expected, but hitting tab, space - does nothing. Form doesn't submit, page doesn't refresh.

I don't know what causes this, or how I would go about debugging it. Please help :)

Browser Info:
Ubuntu 10.04
FireFox 3.6.18 fails
google-chrome 12.0.742.112 fails

Windows 7
Firefox 3.6.15 fails
Chrome 12.0.742.112 fails
Internet Explorer 9.0.8080.16413 - works as expected.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

甜中书 2024-12-01 00:33:57

我能想到的两个可能的原因是:

  1. 按按钮上的空格不会触发“单击”操作/事件。
  2. 其他一些处理程序会拦截单击事件。例如,确保您不在同一表单上同时使用 ajaxSubmitajaxForm

对于2,您可以使用 FF 插件 FireQuery 进行直观检查。

对于 1,您可能需要单步执行插件的实际代码,即 jquery.form.js。取决于您使用的表格方法; if ajaxSubmit,在第 290 行附近设置断点 (doSubmit); if ajaxForm,大约第 589 和 594 行。

我希望这可以帮助您调试错误。

如果您发现这是第一种情况,您可能需要为按钮附加一个按键处理程序并在浏览器中模拟相同的行为:

$('#submitButton').keypress(function(event) {
  if (event.which == 32)  // space bar pressed
    $(this).click();
});

Two possible causes that I can think of are:

  1. Pressing space on the button does not trigger a "click" action/event.
  2. Some other handler intercepts the clicking event. E.g. make sure you don't use both ajaxSubmit and ajaxForm on the same form.

For 2, you can visually check with FireQuery, a plugin for FF.

For 1, you may need to step into the actually code of the plugin, i.e. jquery.form.js. Depending which method you use for the form; if ajaxSubmit, set a breakpoint around line 290 (doSubmit); if ajaxForm, around line 589 and 594.

I hope that helps you in debugging the error.

If you found out it is the first case, you may need to attach a keypress handler for the button and simulate the same behaviour across browsers:

$('#submitButton').keypress(function(event) {
  if (event.which == 32)  // space bar pressed
    $(this).click();
});
护你周全 2024-12-01 00:33:57

尝试将您自己的点击处理程序添加到提交按钮,并放入测试警报以查看是否会触发。

如果有效,您可以自己在表单上调用“提交”。

Try adding your own click handler to the submit button and put in a test alert to see if that fires.

If that works you could call submit on the form yourself.

无尽的现实 2024-12-01 00:33:57

AFAIK,GTK+ 不会触发空格键上的点击。此外,空格键通常与页面滚动相关(大多数浏览器),因此默认情况下它可能不会触发单击。

一种修复方法是在文档上绑定按键,并手动触发点击或表单提交

$(document).die('keypress.spacebar').live('keypress.spacebar', function() {
   // do nothing if not spacebar
   if(e.which != 32) { return; };

   var button = $('#mySubmitButton')[0];
   // check if submit button has focus. if not, return
   if(button !== document.activeElement) {
       return;
   }

   // else, go ahead and submit form
   $('#myform').submit();
   e.preventDefault();
});

请注意,我使用命名空间事件来避免与表单上的任何其他keypress 事件处理程序发生任何冲突。

AFAIK, GTK+ doesn't trigger click on spacebar. Also, spacebar is usually tied to page scroll (by most broswers) so it may not trigger a click by default.

One fix is to bind a keypress on the document and manually trigger a click or form submit.

$(document).die('keypress.spacebar').live('keypress.spacebar', function() {
   // do nothing if not spacebar
   if(e.which != 32) { return; };

   var button = $('#mySubmitButton')[0];
   // check if submit button has focus. if not, return
   if(button !== document.activeElement) {
       return;
   }

   // else, go ahead and submit form
   $('#myform').submit();
   e.preventDefault();
});

Note that I'm using namespaced event to avoid any conflicts with any other keypress event handler on the form.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文