使用以下代码,因此当在表单中的输入字段中聚焦时单击“输入”时,它会禁用标准提交按钮功能。相反,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中触发,只是表单似乎没有被提交。
答案 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。这表示浏览器不允许在自定义函数之后发生“正常”结果。