防止IE表单提交jQuery委托'提交'操作

时间:2010-10-01 00:18:22

标签: jquery internet-explorer

我正在尝试使用jQuery的.delegate()函数来按下提交按钮并阻止重新加载页面。

在我尝试的每个浏览器中都可以正常工作,但是Internet Explorer!

让我在代码中解释一下,我有这个HTML由动态生成的HTML:

<form id='submit-form'>
  <input type='text' id='blah' />
  <input type='submit' id='blahbutton' />
</form>

我的Javascript看起来像这样:

$("body").delegate("#submit-form", "submit", function(event)
{
  // to logic here
  return false;
});

在文本框中输入并使用“Enter”键盘按钮时,它会执行JS罚款并且页面保持原样。但是当使用鼠标单击“提交”按钮时,它会重新加载页面并提交表单。

如何点击此按钮与在Internet Explorer上输入输入相同?

5 个答案:

答案 0 :(得分:3)

我明白了。

我的解决方案是为两者表单提交和点击提交按钮创建操作。

所以:

  • 在输入框中按“Enter”会触发“表单提交”操作
  • 点击“提交”按钮会触发按钮点击操作

这确实意味着代码重复,但它现在可以在IE和其他工作中使用。

答案 1 :(得分:2)

您可以考虑使用按钮而不是提交类型属性

<button type="submit"></button>

相同
<input type="submit"></button>

但是如果你使用

<button type="button"></button> 

<input type="button"></button>

然后使用类似的东西:

$(function() {
    $("#buttonId").bind("click", function() {

        // ...do stuff

        //if all conditions are met

        $("formId").trigger("submit");
    });
});

然后它不会提交表单作为其默认操作,您可以根据需要附加单击侦听器等,并且只要有条件,就让该侦听器函数提交表单你指定(如果有的话)。

这样你就不必使用我认为的东西了,有点黑客取消(使用e.preventDefault(),返回false,等等......)一个没有的表单提交动作首先被解雇。取消默认行为有时会导致奇怪且难以追踪副作用......所以为什么不首先避免这样做(如果你能够做到的话)?

答案 2 :(得分:1)

在这里拍摄远景,但是您在该页面上有任何其他<{1}}或id属性namesubmit-form ?还是全局变量(例如blahbutton属性)?因为IE有名称空间问题(conflates things it shouldn't),并且我不止一次看到这种奇怪的问题通过发现某个地方window具有相同价值的东西而得到解决。

一种简单的方法是暂时为表单和按钮提供全新的ID(例如nameflibbergibbet23),然后查看问题是否消失。如果是这样,那么你知道这是一个奇怪的IE名称冲突,你可以继续搜索和销毁任务......

答案 3 :(得分:0)

试试这个,

<form id='submit-form' onSubmit='return false;'>

答案 4 :(得分:0)

event.preventDefault()event.stopPropagation()不适合你吗?

或者以下也应该有效:

    function myFunction()
    {
        if(...)
        {
           return true;
        }
        return false;
    }

有关

<form id="formId" action="#" onsubmit="return(myFunction())">
...
   <input type="submit" value="submit" />
</form>