为什么这个jQuery代码不能在IE中运行?

时间:2009-08-25 02:37:01

标签: javascript jquery html forms

使用以下代码,因此当在表单中的输入字段中聚焦时单击“输入”时,它会禁用标准提交按钮功能。相反,javascript构建一个新表单并将发布请求发送到另一个页面。我正在使用它,以便我可以实现“表单内的表单”功能。输入字段有自己的提交按钮,我有类似的代码来执行帖子。

在Firefox中,这完美无缺;在IE中击中输入什么都不做。这是代码:

//event handler for input field within standard form
$('#inputfield').bind('keypress', function(e) {
    var code = e.keyCode || e.which;
    if(code==13){
        //suppress default submit functionality
        $('form').submit(function () {
            return false;
        });

        //...assemble some data here...

        var url_string = "...";

        var $form = $("<form method='POST'>").attr("action", url_string);
        $("<input type='hidden' name='body'>").attr("value",body).appendTo($form);

        $("<input type='hidden' name='title'>").attr("value",title).appendTo($form);

        //...create more form elements here...

        $form.appendTo("body");
        $form.submit();
    }
});

为什么这在IE中不起作用的任何想法(我在IE 6,7和8中尝试过)?

更新:只是为了详细说明问题:在firefox中,最后的$form.submit();行会导致jquery生成表单提交并重定向页面。在IE中根本没有任何事情发生。按键在IE中触发,只是表单似乎没有被提交。

3 个答案:

答案 0 :(得分:2)

如果尝试使用普通的DOM提交方法而不是jQuery,会发生什么?

// instead of:
// $form.submit();
// try this:
$form[0].submit();
  

ie给我一个javascript错误:0为null或不是对象..

好的,这表明你的jQuery对象是空的。可能是appendTo正在做一些奇怪的事情......试试这个:

$form = $form.appendTo("body");
$form.submit();

如果这不起作用,请输入以下调试行:

alert($form.length);
$form.appendTo("body");
alert($form.length);
$form.submit();

好的,我现在已经知道了:

这是您生成导致问题的表单的行。将其更改为:

var $form = $("<form></form>").attr({"action" : url_string, "method" : "POST"});

你应该有什么工作,所以这可能是jQuery中的一个错误,我不确定。

答案 1 :(得分:0)

IE DOM不同,捕捉事件与FF或Chrome不同。

var key;      
 if(window.event)
      key = window.event.keyCode; //IE
 else
      key = e.which; //firefox

if(key == 13)
      do a thing

答案 2 :(得分:0)

尝试在按键事件处理函数结束时返回false。这表示浏览器不允许在自定义函数之后发生“正常”结果。