2不能按回车键提交表单并运行JS动作


2Cannot press return to submit form and run JS action

这一定比我写的要简单。我有一个表单,有一个onclick动作,它运行js提交表单值到另一个页面。如何允许用户按回车键来执行相同的操作?我试过一些onkeypress的东西,但没有工作。下面是表单和正在运行的js。

谢谢!

**更新的代码,以反映更多的我想做的…

<script type="text/javascript">
        function getQueryValue(name) {
                var match = (new RegExp('[?&;]' + name + '=([^&;#]*)')).exec(document.URL);
                return match ? unescape(match[1]) : null;
        }
        var ext = "&ext="+getQueryValue('ext');
        </script>
        <script src="prototype.js"></script>
        <script type="text/javascript">
        function checkSubmit(e)
        {
           if(e && e.keyCode == 13) // if key is enter
           {
              doSubmit(); // call your submit function
           }
        }
        </script>
</head>
<body>
        <div id="dialNumber_form">
                <form id="dialer" style="margin-bottom:0;">
                        <input id="numberBox" name="outnumber" onKeyUp="checkSubmit(event)" type="text">
                        <input id="submitButton" onsubmit="dosubmit()" type="button"/>
                </form>
                <div class="clear"></div>
        </div>
        <div id="success">
        </div>
        <script type="text/javascript">
                function dosubmit( ) {
                        var par = $('dialer').serialize();
                        var url = par + ext;
                        new Ajax.Updater('success', 'dial.php', { method: 'post' , parameters: url , evalScripts: true } );
                        $('dialer').reset();
                }
        </script>
</body>

dial.php获取您在字段中输入的号码,检查它是否有效,并将其发送到我们的PBX进行拨号。如果您单击了提交按钮,就可以正常工作。如果按return(即使使用了更新的代码,如下所示),页面将刷新,outnumber框的内容将作为GET URL变量发布,而不是发送给dosubmit操作。当表单工作时,您会看到它保持在最初构建时的状态(dialout.htm?ext={extension number})

感谢所有的回复。让我试试你的一些建议,然后我再给你答复。

我不确定我是否清楚我需要完成什么。这整个事情是运行在一个iframe传递URL变量。我控制不了那件作品,所以我得利用现有的东西。当用户打开它时,URL看起来像.../dialout.htm?ext=1234。使用分机号,连同输入到outnumber框中的号码,进行呼叫(系统先拨分机号,然后超过号码)。它们应该被传递给dial.php进行处理,如果一切正常,则返回一个带有结果的成功响应(并进行调用)。如果点击拨号按钮,效果会很好。页面不会刷新,经过短暂的延迟后,弹出成功框并进行呼叫。如果按enter键,则刷新表单,URL变为.../dialout.htm?outnumber=<number>。我想做点击拨号按钮所做的事情。我在这里尝试过的任何方法都不能解决这个问题(除非我真的很慢……)。什么好主意吗?

您应该将提交按钮设置为<input type="submit" id="submitButton" etc>,然后附加onsubmit处理程序。jQuery:

$("#dialer").submit(function() {
    var result = doMyStuff();
    if (result > 10) {
        return false; // prevent the submit
    }
    else {
        return true; // allow the submit to happen
    }
});

参见jQuery .submit()文档。

返回false阻止提交发生,true允许提交。(我通常不会加上&;return false否则返回true&;(return (result<=10);)但希望使真/假sumbit控制显式)

当使用AJAX进行提交时,您希望返回false,以便抑制正常的提交。


更新:

返回false来停止默认的事件处理,这些天,大多被弃用了。通常首选使用preventDefault()。这将把我的示例更改为:

$("#dialer").submit(function(event) {
    var result = doMyStuff();
    if (result > 10) {
        event.preventDefault(); // prevent the form submit
    }
});

keyDown/keyUp监听器应该在输入而不是提交按钮

<input id="numberBox" name="outnumber" onKeyUp="checkSubmit(event)" type="text">
function checkSubmit(e)
{
   if(e && e.keyCode == 13) // if key is enter
   {
      doSubmit(); // call your submit function
   }
}

工作示例:http://jsfiddle.net/sVnMy/

这将监听输入字段上的按键,当按下回车键时,它将提交表单