这是一个有趣的问题。那么,如果你没有想到第二个(正如我承认的那样),那么你可能会挂钩HTML <form>
元素的blur
事件。
<form onblur="autosave(this)">
但是,HTML <form>
元素不支持该事件。太糟糕了。
然后我想到了jQuery的新的1.4 focusout()
事件。
$('form').focusout(function() { autosave(this); });
不幸的是,当你跳到(选项卡,单击)到同一表单内的下一个输入字段时,事件也会被触发。不太好,自动保存每个fieldjump可能会太昂贵。效果与$(':input').blur(function() { autosave(this.form); });
相同。
我又试图绕行focusin()
另一种方式:
$('form').focusin(function() {
$(this).addClass('focused');
});
$(':not(form)').focusin(function(e) {
if (!$(e.target).parents('form.focused').length) {
var form = $('form.focused').removeClass('focused');
autosave(form);
}
});
奇怪的是这部作品在IE浏览器,而不是在其他浏览器。这将是另一个IE错误/怪癖focus
是由输入元素以外的所有元素支持。
您最好的选择可能是挂在click()
事件上。
$('form').focusin(function() {
$(this).addClass('focused');
});
$(':not(form)').click(function(e) {
if (!$(e.target).parents('form.focused').length) {
var form = $('form.focused').removeClass('focused');
autosave(form);
}
});
这工作正常。你可以在这里找到live demo。
注意,我不是说要推你的jQuery(一个JS库,它简化了疯狂HTML DOM traversion和操作)通过你的喉咙左右,但我没有看到平原的JavaScript很好的方式来实现这里没有写代码的10倍。
优秀..非常感谢你thsi ...我使用ibm jsf框架..我可以通过给我的表单id(我可以在我的情况下在我的页面中有多个表单来控制此操作,不想保存其他表单数据 - 即输入字段)。 – jack 2010-06-27 22:31:55
也在我的形式,我可以有只读数据..不只是输入字段..我想保存输入字段和只读数据..请你建议我如何做到这一点...请让我知道如何检索这些自动提交的表单数据在服务器端...我认为request.getparameter可能工作...但我使用jsf(我的页面绑定到一个支持豆)..请建议...对不起多个问题..这是有点复杂的领域给我.. – jack 2010-06-27 22:32:14
很多先谢谢, 杰克。 – jack 2010-06-27 22:32:58