“函数”在Javascript中没有定义错误:调用我的函数的正确方法是什么?

时间:2011-11-30 23:21:21

标签: javascript jquery

我理解了一下因为这篇文章:JQuery, setTimeout not working为什么它不起作用,但是保持这一切,在我的div中调用_finalvalidate()的正确方法是什么?

 <script type="text/javascript">

$(document).ready(function(){

//On Submitting
function _finalvalidate(){
    alert('ppp');
    if(validateName() & validateEmail() & validatePhone()){
        alert('OK');
        return true
    }
    else{
        alert('false');
        return false;
    }
}
});

</script>


<div onclick="_finalvalidate();"> Take action </div>

6 个答案:

答案 0 :(得分:6)

jQuery的做法是:

<script type="text/javascript">

    $(document).ready(function(){

        //When clicking on the div, execute this 
        $("#validation").click(function() {
            alert('ppp');
            if(validateName() & validateEmail() & validatePhone()){
                alert('OK');
                return true
            }
            else{
                alert('false');
                return false;
            }
        });
    });

</script>
....
<div id="validate"> Take action </div>

如果您真的想使用javascript函数样式,则必须将函数放在document.ready()函数之外,然后您才能使用onclick属性调用它:

<script type="text/javascript">

    function _finalvalidate(){
        alert('ppp');
        if(validateName() & validateEmail() & validatePhone()){
            alert('OK');
            return true;
        }
        else{
            alert('false');
            return false;
        }
    }   


</script>
....
<div onclick="_finalvalidate();"> Take action </div>

在这种情况下,您不再涉及jQuery。

答案 1 :(得分:3)

如果您使用的是jQuery,则应该使用jQuery的事件绑定事件。但至于为什么它不起作用,这里有一些关于JS范围规则的信息。


您声明稍后要使用的任何函数都不应该在jquery文档就绪回调中。你无法得到它,因为它隐藏在一个函数中,它提供了你自己无法从外面获取的私有范围。

var f = function() {
  var inner = function() {};
};
inner(); // out of scope

您可以将其导出到全局对象,使其随处可用。

var f = function() {
  window.inner = function() {};
};
inner(); // works!

但最好的方法是首先在全局范围内声明它。

var f = function() {}; // Now this function has no purpose anymore at all!
var inner = function() {};
inner(); // works

答案 2 :(得分:1)

您尝试调用它的窗口范围内不存在您的功能。我会将您的代码更改为:

<div id="action">Take Action</div>

然后您的JavaScript变为:

<script type="text/javascript">

$(document).ready(function(){

    //On Submitting
    $('#action').click(function() {
        alert('ppp');
        if(validateName() & validateEmail() & validatePhone()){
            alert('OK');
            return true
        } else {
            alert('false');
            return false;
        }
    });

</script>

答案 3 :(得分:0)

如果您希望从div的onclick属性调用您的方法,则需要在全局范围内使其可用。以下是一些选项。但是,我应该指出,选项1在这些日子里通常不赞成,而选项2只是愚蠢的。对于这种事情,推荐的方法是不加掩饰地连接你的事件处理程序,就像在Cory的答案中那样。

选项1

<script type="text/javascript">

function _finalvalidate(){
    alert('ppp');
    if(validateName() & validateEmail() & validatePhone()){
        alert('OK');
        return true
    }
    else{
        alert('false');
        return false;
    }
}

</script>


<div onclick="_finalvalidate();"> Take action </div>

选项2

<script type="text/javascript">

var _finalvalidate;

$(document).ready(function() {
    _finalvalidate = function(){
        alert('ppp');
        if(validateName() & validateEmail() & validatePhone()){
            alert('OK');
            return true
        }
        else{
            alert('false');
            return false;
        }
    };
});

</script>


<div onclick="_finalvalidate();"> Take action </div>

答案 4 :(得分:0)

要将它保存在jQuery中,我会给你的div一个id标签并使用jQuery onclick事件调用它。您还确定要在if或逻辑和&中执行按位&&操作吗?

<script type="text/javascript">

$(document).ready(function() {
    $('#callme').click(function() {
        alert('ppp');
        if(validateName() && validateEmail() && validatePhone()){
            alert('OK');
            return true;
        } else {
            alert('false');
            return false;
        }
    }
});

</script>

<div id="callme"></div>

答案 5 :(得分:0)

您的代码的问题在于您的函数未在全局上下文中定义,而是在document.ready回调函数中定义。因此,当浏览器获取onclick并对字符串进行eval时,它在全局上下文中找不到该函数名称。您可以通过多种不同的方式解决它:

1)将您的功能更改为在全局范围内定义,如下所示:

//On Submitting
window._finalvalidate = function(){

2)将_finalvalidate()功能移到document.ready()之外,使其位于全局范围内。它没有理由在document.ready()中,因为它没有立即执行。

3)更改为指定事件处理程序的“jQuery”方式,而不是像你在他的答案中说明的那样在你的HTML中放入onclick = xxx。