2010-06-26 34 views
2

我有一个表单,它有4个输入元素。如果用户只输入两个条目并点击屏幕上的任何地方(表格)...我想保存细节..这就像自动保存。Javascript - 获取当前控制位置的表格

我有我的form..i的ID想在screen..so电流控制,我可以ssave数据如果两个表格ID不同形式的ID进行比较..

请你告诉我怎样才能获得屏幕上当前控制位置的窗体ID(有时候控件可能在窗体之外..在这种情况下窗体ID当前cotrol位置将为空)......但我怎么能确定在JavaScript 。

请建议...

许多在此先感谢, 杰克。

回答

0

这是一个有趣的问题。那么,如果你没有想到第二个(正如我承认的那样),那么你可能会挂钩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倍。

+0

优秀..非常感谢你thsi ...我使用ibm jsf框架..我可以通过给我的表单id(我可以在我的情况下在我的页面中有多个表单来控制此操作,不想保存其他表单数据 - 即输入字段)。 – jack 2010-06-27 22:31:55

+0

也在我的形式,我可以有只读数据..不只是输入字段..我想保存输入字段和只读数据..请你建议我如何做到这一点...请让我知道如何检索这些自动提交的表单数据在服务器端...我认为request.getparameter可能工作...但我使用jsf(我的页面绑定到一个支持豆)..请建议...对不起多个问题..这是有点复杂的领域给我.. – jack 2010-06-27 22:32:14

+0

很多先谢谢, 杰克。 – jack 2010-06-27 22:32:58