Javascript - 获取当前控制位置的表单

时间:2010-06-26 23:07:56

标签: javascript

我有一个表单,它有4个输入元素。如果用户只输入两个条目并点击屏幕上的任何位置(表单外)...我想保存详细信息..就像自动保存。

我有我的表格的ID ..我想与屏幕上当前控件的表单ID进行比较..如果两个表单ID不同,我可以保存数据..

请问你能告诉我如何在屏幕上获取当前控制位置的表单ID(有时候控件可能在表单之外......在那种情况下,表单当前cotrol位置的id将为null)...但是如何我可以在javascript中确定。

请建议......

非常感谢, 插孔。

1 个答案:

答案 0 :(得分:0)

这是一个有趣的问题。

好吧,如果你没有想到一秒钟(正如我承认的那样),你只需要挂钩有问题的HTML blur元素的<form>事件。

<form onblur="autosave(this)">

但是,HTML <form>元素不支持该事件。太糟糕了。

然后我考虑了jQuery的新1.4 focusout()事件。

$('form').focusout(function() { autosave(this); });

不幸的是,当您跳转(tab,click)到同一表单中的下一个输入字段时,该事件也会被触发。不太好,在每个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 bug / quirk,除了输入元素之外的所有元素都支持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(一个疯狂地简化HTML DOM traversion和操作的JS库),但是我在 plain <中看不到好的方法/ em> JavaScript实现这一目标,而无需编写代码的10倍。