Javascript 为什么';这个jQuery代码在IE中不起作用吗?
使用以下代码是为了在窗体内的输入字段中单击“回车”时禁用标准提交按钮功能。相反,javascript构建一个新表单并向另一个页面发送post请求。我使用它是为了实现“表单中的表单”功能。输入字段有自己的提交按钮,我有类似的代码来执行post 在firefox中,这是完美的;在IE中,按enter键根本不起作用。代码如下: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
//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以查看差异。