'这'表单中的关键字onsubmit调用

The 'This' keyword in a form onsubmit call

本文关键字:onsubmit 调用 关键字 表单      更新时间:2023-09-26

我一直在寻找这个问题的答案,但没有成功。对你们中的一些人来说,这可能是一个很容易回答的问题。

在此标签中:

<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 is not defined"错误。

此外,上面的代码在文档的末尾加载,并且在文档的开头调用带有validate函数的文件。因此,当我尝试在这里调用validate函数时,我会认为它是可用的,因为它应该已经加载了。

在这种情况下,this表示发生事件的元素,即form元素。

如果你想从其他地方调用validate(),但让它验证相同的表单,那么只需获得对具有.getElementByid()的表单的引用,并传递:

function MyTest(){
  validate(document.getElementById("somethinghere"));
}

(其中"somethinghere"是您表单的id。)

编辑:关于您的编辑:

"我找到了这段代码,它负责通过Ajax提交表单。"

    $('.jcart').submit(function(e) {
        add($(this));
        e.preventDefault();
    });

您是否确定负责通过Ajax提交表单?它似乎是在一个类为"jcart"的表单上创建一个提交处理程序,而您最初显示的表单没有该类。除非你没有显示的add()函数提交"somethinghere"表单?

"但我收到一个‘validate is not defined’错误。"

如果内联submit="return validate(this);"在同一页上运行,那么validate()必须是一个全局函数,这样您就可以从页面上的任何位置调用它。如果这不起作用,那么您的代码肯定比您显示的要多。