我正在使用jquery.form.js(版本:2.84),在下面的代码中,我看到它在$('imageform')之前卡住.ajaxSubmit ..如果我删除preventDefault,表单将被提交为通常,页面会刷新。当preventDefault存在时,我确实看到了loader.gif,但是在服务器端我没有看到任何数据,而且警报也从未被触发..
google.maps.event.addDomListener($('photoimg'), 'change', function(e){
e.preventDefault(); // <-- important
$("preview").innerHTML = ("<img src=\"loader.gif\" alt=\"Uploading....\"></img>");
$('imageform').ajaxSubmit({
target: 'preview'
});
alert('after submit');
});
我也使用下面的函数,这就是为什么我使用$('imageform')而不是$('#imageform')......
function $(element) {
return document.getElementById(element);
}
答案 0 :(得分:3)
不,因为您已使用$
函数覆盖了getElementById
。
$('imageform').ajaxSubmit
将在DOM元素上执行ajaxSubmit
,您需要一个jQuery对象。您需要删除$
或使用:
jQuery('#imageform').ajaxSubmit
$("#foo")
与document.getElementById("foo")
不同。
jQuery函数返回一个jQuery对象,它包含所有jQuery函数,如.bind
和.ajaxSubmit
。
document.getElementById
返回一个没有任何jQuery函数的裸DOM元素。
jQuery对象就像一个DOM元素数组,所以:
$("#foo")[0] === document.getElementById("foo")
答案 1 :(得分:2)
你的$
函数破坏了jQuery的同一个变量的含义。您可以在jQuery中使用大量兼容性内容,或采用简单的方法:将您的$
函数重命名为其他内容,或者直接调用document.getElementById()
,因为您的函数只能避免输入那个电话。或者,更好的是,使用jQuery来处理该调用。