提交调用表单中的“This”关键字

时间:2012-08-18 07:31:54

标签: javascript

我一直在寻找这个问题的答案,但没有运气。你们中的一些人可能很容易回答。

在此标记中:

<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函数的文件。所以当我尝试在这里调用它时,我会认为验证函数是可用的,因为它应该已经加载了。

1 个答案:

答案 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()必须是全局函数,因此您可以从页面的任何位置调用它。如果这不起作用,那么你的代码必须比你所展示的更多。