ajax表单提交不起作用

时间:2011-09-16 12:56:04

标签: javascript jquery-plugins jquery jquery-selectors

我正在使用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);
}

2 个答案:

答案 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来处理该调用。