Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 关注并提交事件触发顺序_Javascript - Fatal编程技术网

Javascript 关注并提交事件触发顺序

Javascript 关注并提交事件触发顺序,javascript,Javascript,我有一个带有输入字段的表单,输入字段附加了一个焦点输出事件处理程序 我还有一个表单提交处理程序附加在表单中,所以当用户焦点离开输入框时,它的 focus out处理程序可以执行,但在提交表单时,也会触发输入框上的focus out事件。那么我怎样才能防止这种情况呢 感谢您的帮助:) 演示代码 $('input').focusout(函数(){ 警惕(“聚焦出去”); }); $('form')。提交(函数(){ 警报(“提交的表格”); 返回false; }); 当我在firefox和chro

我有一个带有输入字段的表单,输入字段附加了一个焦点输出事件处理程序 我还有一个表单提交处理程序附加在表单中,所以当用户焦点离开输入框时,它的 focus out处理程序可以执行,但在提交表单时,也会触发输入框上的focus out事件。那么我怎样才能防止这种情况呢

感谢您的帮助:)

演示代码
$('input').focusout(函数(){
警惕(“聚焦出去”);
});
$('form')。提交(函数(){
警报(“提交的表格”);
返回false;
});
当我在firefox和chrome中运行上述代码时,输出是不同的 firefox:首先会发出焦点退出警报,然后是表单提交 chrome:提交的表单首先被提醒,然后被调出焦点
为什么它在两种浏览器中的行为都不同,我想防止在表单提交时聚焦。您一次只能聚焦一个元素,因此,当您单击“提交”按钮时,它可能会自动聚焦,表单中的所有其他元素都会聚焦,这就是触发事件的地方


您所做的看起来并不是实现任何目标的最佳解决方案,请告诉我们您正在尝试做什么,我们可能会找到更好的解决方案。

让浏览器行为变得更糟糕
IE
仅在enter时触发submit事件,并取消focusout事件。(我发现这种期望的行为),因为点击回车按钮,不应该导致输入失去焦点

在这种情况下,您无法真正预测首先触发哪个事件

为了防止出现这种情况,您应该在表单上设置一个
keydown
事件,用于检测用户键盘输入以及上次输入的焦点时间。如果是,则阻止所有事件并提交

$('input').focusout(function(e){
    alert("Focusout gets fired.");
});

$('form').keydown(function(e){

    if (e && e.target == $('input')[0] && e.keyCode == 13) //13 = enter.
    {
        //submit the form, and in case something goes wrong, prevent default.
        $('form')[0].submit();
        e.preventDefault();
    }

});

旁注:您的
表单
有一个
输入
。为了证明这一点,我使用了
$('form')[0]
$('input')[0]
来选择元素。在真实表单中,您希望通过
id
选择器提供这些值。

您的问题缺少一个问题。@GolezTrol问题就在那里:我如何防止这种情况发生?@Barmar,添加的内容变得清晰,是的。但我的表单是通过按enter键提交的,我的表单中没有按钮在表单的最后一个字段中按enter键将焦点从该字段中移开,就像跳出选项卡一样,然后提交表单。
$('input').focusout(function(e){
    alert("Focusout gets fired.");
});

$('form').keydown(function(e){

    if (e && e.target == $('input')[0] && e.keyCode == 13) //13 = enter.
    {
        //submit the form, and in case something goes wrong, prevent default.
        $('form')[0].submit();
        e.preventDefault();
    }

});