jQuery:自动提交输入与浏览器自动完成

时间:2012-02-03 10:12:17

标签: javascript jquery browser autocomplete submit

如果用户在表单中按下“enter”键,我会使用此JavaScript代码提交最近的按钮:

jQuery.fn.installDefaultButton = function()
{
$('form input, form select').live('keypress', function(e)
{
    if ((e.which && e.which == 13) || (e.keyCode && e.keyCode == 13))
    {
        if ($(this).closest('form').find('button').size() <= 0)
        {
            return true;
        }
        var defaultButton = $(this).closest('form').find('button:first');
        defaultButton.click();
        $(this).blur();
        return false;
    }
    else
    {
        return true;
    }
});
return this;

};

如果启用了浏览器自动完成功能,并且用户通过按“输入”键选择了建议值,则表单将被提交。但这不是理想的行为。在这种情况下不应该提交。有没有办法阻止它?

编辑: 这是一个小例子:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1 /DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
</head>
<body>
    <form action="action.do">
        <input name="input1"/>
        <input name="input2"/>
        <button type="submit" name="button_action1" class="button">Button 1</button>
        <input name="input3"/>
        <input name="input4"/>
        <button type="submit" name="button_action2" class="button">Button 2</button>
    </form>
</body>

1 个答案:

答案 0 :(得分:1)

我没有机会试试这个,但它应该适合你。

$("form").live('change', function(e) {
   $(this).data('changed', true); 
});

$('form input, form select').live('keypress', function(e)
{
    var form = $(this).closest('form');
    if (((e.which && e.which == 13 || (e.keyCode && e.keyCode == 13)) && form.data('changed') == true)
    {
         if ($(this).closest('form').find('button').size() <= 0)
        {
            return true;
        }

        var defaultButton = form.find('button:first');
        defaultButton.click();
        $(this).blur();
        console.log("Submitted!");
        form.data('changed', false);
        return false;
    }
    else
    {
        return true;
    }
});

在自动填充上按Enter键不会触发更改事件(或者至少在我以前的经验中没有触发),所以当有实际有效的更改时,您将要发送它。可能存在这样的情况:当您单击要设置表单数据的单元格时,&#34;已更改&#34;要真实,但你需要进行实验,看看你是否得到了你期望的行为。

编辑:

告诉你我的意思

$("form").live('focus', function(e) {
   $(this).data('changed', true); 
});