我一直在寻找这个问题的答案,但没有运气。你们中的一些人可能很容易回答。
在此标记中:
<form method="post" action="" class="jcart" id="somethinghere" onsubmit="return validate(this)">
'this'关键字代表什么?
例如,如果我想从另一个javascript函数中调用此表单上的'validate'函数,我该怎么做?
我知道它是这样的:
<script type='text/javascript'>
function MyTest(){
validate(???);
}
</script>
但我不知道在调用validate函数时应该放什么。
修改
这就是我想要做的事情。
我有一个通过Ajax提交的表单。它也有一些验证。但是,通常在提交表单时调用验证脚本。但是,Ajax函数已经获取了“提交”按钮的“单击”并提交了数据,因此表单永远不会以触发验证的方式“提交”。
我找到了这段代码,它负责通过Ajax提交表单。
$('.jcart').submit(function(e) {
add($(this));
e.preventDefault();
});
所以,我希望能够从那里运行验证函数,并且只有在验证通过时才调用add()函数。但我不知道如何从这里调用函数,因为我不知道如何引用表单来获取与onsubmit调用中的'this'相同的元素引用。
编辑2
我试过了:
$('.jcart').submit(function(e) {
if(validate(document.getElementById("somethinghere"))){
alert("validated");
add($(this));
e.preventDefault();
}
else {
alert("not validated");
e.preventDefault();
}
});
但是我收到了'验证未定义'错误。
此外,上面的代码加载在文档的末尾,并且在开头调用带有validate函数的文件。所以当我尝试在这里调用它时,我会认为验证函数是可用的,因为它应该已经加载了。
答案 0 :(得分:1)
在这种情况下,this
表示事件发生的元素,即表单元素。
如果您想从其他地方调用validate()
,但让它验证相同的表单,那么只需使用.getElementByid()
获取对该表单的引用并传递:
function MyTest(){
validate(document.getElementById("somethinghere"));
}
(其中“某事”是你表格的身份。)
编辑:关于您的编辑:
“我找到了这段代码,它负责通过Ajax提交表单。”
$('.jcart').submit(function(e) {
add($(this));
e.preventDefault();
});
您确定是否负责通过Ajax提交表单?它似乎是在类“jcart”的表单上创建一个提交处理程序,并且您最初显示的表单没有该类。除非您未显示的add()
函数提交“某事”形式?
“但我得到'验证未定义'错误。”
如果内联submit="return validate(this);"
在同一页面上工作,则validate()
必须是全局函数,因此您可以从页面的任何位置调用它。如果这不起作用,那么你的代码必须比你所展示的更多。