表单提交上的setTimeout返回'not a function'错误

时间:2010-10-12 16:30:52

标签: javascript

我有以下内容:

var thiscode = {
init: function(){
    jQuery('#submit').bind('click',thiscode.clickListener);
},

clickListener: function(event){
    setTimeout('document.myform.submit()',5000);
    return false;
}
};
thiscode.init();

setTimeout正在工作,但是当它触发时,我得到了这个:“document.myform.submit不是一个函数”。

知道为什么和/或如何修复它?

4 个答案:

答案 0 :(得分:5)

不要将字符串传递给setTimeout,传递匿名函数......

clickListener: function(event) {
  setTimeout(function() {
    document.myform.submit();
  }, 5000);
  return false;
}

编辑:刚刚有了启示。如果表单中的元素名称/ id为“submit”,则会覆盖DOM中的submit函数(document.myform.submit现在将引用该元素而不是函数)。如果是这种情况,则需要重命名该元素。

答案 1 :(得分:5)

这可能与您使用setTimeout(其他人提出的问题)无关。

最可能的原因是你在表单中有一个名为submit(或者作为id的元素)的元素(可能是你与jQuery选择器匹配的元素)并且它已经替换了function它位于submit属性上,HTMLElementNode

最简单的解决方案是重命名元素。

答案 2 :(得分:0)

setTimeout也可以使用函数句柄 - 尝试传递document.myform.submit而不使用引号:

setTimeout(document.myform.submit,5000);

答案 3 :(得分:0)

大卫的答案很好,但你真的不应该绑定click,如果用户按下enter提交表单怎么办?他们只是绕过你的手术。

而是绑定.submit()。您可以使用变量来控制是否有提交:

var submitNow = false;
$(function() {  
      // Set up the submit handler
    $("form").submit(function() {

          // In 5 seconds...
        setTimeout(function() {

              // Set the submit variable to true
            submitNow = true;

              // Trigger the submit
            $("form").submit();
        }, 5000);

          // This will only submit if submit variable is true.
        return submitNow;
    });
});​

Try it out with this jsFiddle example