Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/440.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 为什么';这个jQuery代码在IE中不起作用吗?_Javascript_Jquery_Html_Forms - Fatal编程技术网

Javascript 为什么';这个jQuery代码在IE中不起作用吗?

Javascript 为什么';这个jQuery代码在IE中不起作用吗?,javascript,jquery,html,forms,Javascript,Jquery,Html,Forms,使用以下代码是为了在窗体内的输入字段中单击“回车”时禁用标准提交按钮功能。相反,javascript构建一个新表单并向另一个页面发送post请求。我使用它是为了实现“表单中的表单”功能。输入字段有自己的提交按钮,我有类似的代码来执行post 在firefox中,这是完美的;在IE中,按enter键根本不起作用。代码如下: //event handler for input field within standard form $('#inputfield').bind('keypress', f

使用以下代码是为了在窗体内的输入字段中单击“回车”时禁用标准提交按钮功能。相反,javascript构建一个新表单并向另一个页面发送post请求。我使用它是为了实现“表单中的表单”功能。输入字段有自己的提交按钮,我有类似的代码来执行post

在firefox中,这是完美的;在IE中,按enter键根本不起作用。代码如下:

//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();
    }
});
//标准表单中输入字段的事件处理程序
$('#inputfield').bind('keypress',函数(e){
var代码=e.keyCode | | e.which;
如果(代码==13){
//抑制默认提交功能
$('form')。提交(函数(){
返回false;
});
//…在这里收集一些数据。。。
var url_string=“…”;
var$form=$(“”).attr(“操作”,url\u字符串);
$(“”).attr(“值”,正文).appendTo($form);
$(“”).attr(“值”,标题).appendTo($form);
//…在此创建更多表单元素。。。
$form.appendTo(“正文”);
$form.submit();
}
});
你知道为什么这在IE中不起作用吗(我试过IE 6、7和8)


更新:只是为了详细说明问题:在firefox中,
$form.submit()行导致jquery生成的表单提交,页面重定向。在我看来,什么也没发生。IE中的按键确实会触发,只是表单似乎没有被提交。

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

// instead of:
// $form.submit();
// try this:
$form[0].submit();
ie给我一个javascript错误:0为null或不是对象

好的,这表明jQuery对象是空的。它可能是做奇怪事情的附属物。。。试试这个:

$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"});
var$form=$(“”).attr({“action”:url_string,“method”:“POST”});

你所做的应该是有效的,所以这可能是jQuery中的一个bug,我不确定。

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

尝试在keypress事件处理程序函数的末尾返回false。这表示浏览器不允许在自定义功能后出现“正常”结果。

因为IE崩溃了吗?抱歉,我不得不这么做。除非我误解了你,就像我在更新中提到的,IE中的偶数被解雇了,所以问题不在于捕获关键事件。它不起作用,所以我添加了dubugging行,它为两个事件都向0发出警报(在firefox中,它为两个事件都向1发出警报)。是的,成功了!真奇怪。非常感谢你的帮助!嘿,我把这张表放在一起,它展示了你的问题。在Firefox中查看,然后查看IE以查看差异。