2

一段时间以来,我一直在寻找这个问题的答案,但没有运气。对于你们中的一些人来说,这可能是一个容易回答的问题。

在这个标签中:

<form method="post" action="" class="jcart" id="somethinghere" onsubmit="return validate(this)">

“this”关键字代表什么?

例如,如果我想从另一个 javascript 函数内部调用此表单上的“验证”函数,我该怎么做?

我知道是这样的:

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

4

1 回答 1

2

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

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

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

(其中“somethinghere”是您表单的 ID。)

编辑:关于您的编辑:

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

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

确定负责通过 Ajax 提交表单吗?它似乎是在具有“jcart”类的表单上创建提交处理程序,而您最初显示的表单没有该类。除非add()您未显示的功能提交“somethinghere”表单?

“但我得到一个'验证未定义'错误。”

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

于 2012-08-18T07:42:42.207 回答