我有以下内容:
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不是一个函数”。
知道为什么和/或如何修复它?
答案 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;
});
});