我正在尝试使用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上输入输入相同?
答案 0 :(得分:3)
我明白了。
我的解决方案是为两者表单提交和点击提交按钮创建操作。
所以:
这确实意味着代码重复,但它现在可以在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
属性name
或submit-form
?还是全局变量(例如blahbutton
属性)?因为IE有名称空间问题(conflates things it shouldn't),并且我不止一次看到这种奇怪的问题通过发现某个地方window
具有相同价值的东西而得到解决。
一种简单的方法是暂时为表单和按钮提供全新的ID(例如name
和flibbergibbet23
),然后查看问题是否消失。如果是这样,那么你知道这是一个奇怪的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>