2

JQuery众所周知和喜爱的插件ajaxForm修改了要通过 ajax 提交的表单。

我已经让它正常工作,包括回调函数。我发现被打破的是,在许多情况下,我没有按回车键,而是按了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 - 按预期工作。

4

3 回答 3

4

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

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

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

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

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

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

$('#submitButton').keypress(function(event) {
  if (event.which == 32)  // space bar pressed
    $(this).click();
});
于 2011-07-18T21:28:49.280 回答
1

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

如果可行,您可以自己在表单上调用提交。

于 2011-07-18T21:39:26.580 回答
0

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

一种解决方法是keypress在文档上绑定 a 并手动触发 aclick或 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();
});

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

于 2011-07-19T03:56:19.393 回答