2,不要按返回提交表单并运行JS动作

时间:2011-12-05 17:19:10

标签: php javascript html

这比我做的要容易得多。我有一个具有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。这是有效的,假设您单击提交按钮。如果按回车键(即使使用更新的代码,如下所示),页面也会刷新,并且outnumber框的内容将作为GET URL变量发布,而不是发送到dosubmit操作。当表单有效时,您会看到它保持原始构建(dialout.htm?ext={extension number}

感谢所有回复。让我试试你的一些建议,我会回复你。

我不确定自己需要完成的事情。整个过程都是在传递URL变量的iframe中运行。我无法控制那件作品,所以我需要处理我所拥有的作品。当用户打开它时,URL看起来像.../dialout.htm?ext=1234。使用扩展名以及输入outnumber框中的号码来发出呼叫(系统拨打分机号码,然后是号码)。应将它们传递给dial.php进行处理,如果一切正常,则会返回成功响应结果(并进行调用)。如果单击拨号按钮,这很有用。页面不刷新,短暂延迟后,弹出成功框并发出呼叫。如果按下Enter键,表单将刷新,并且URL将更改为.../dialout.htm?outnumber=<number>。我想让Enter执行点击拨号按钮的操作。我在这里尝试的任何东西都没有真正起作用(除非我真的很慢......)。有什么想法吗?

2 个答案:

答案 0 :(得分:1)

您应该设置提交按钮<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() docs

返回false会阻止提交,true允许。 (我通常不会把“return false else return true”(返回(结果&lt; = 10);)但是想使真/假sumbit控件显式化)

使用AJAX进行提交时,您需要返回false,以便正常提交被禁止。


更新:

目前,返回false停止默认事件处理的情况大多已弃用。通常首选使用preventDefault()。这会改变我的例子:

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

答案 1 :(得分:0)

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/

这将按下输入栏上的按键,当按下回车键时,它将提交表格