Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
&引用;功能“;Javascript中未定义错误:调用我的函数的正确方法是什么?_Javascript_Jquery - Fatal编程技术网

&引用;功能“;Javascript中未定义错误:调用我的函数的正确方法是什么?

&引用;功能“;Javascript中未定义错误:调用我的函数的正确方法是什么?,javascript,jquery,Javascript,Jquery,因为这篇文章,我了解了一点:为什么它不起作用,但让一切保持这样,在我的div中调用\u finalvalidate()的正确方法是什么 <script type="text/javascript"> $(document).ready(function(){ //On Submitting function _finalvalidate(){ alert('ppp'); if(validateName() & validateEmail() &

因为这篇文章,我了解了一点:为什么它不起作用,但让一切保持这样,在我的div中调用
\u 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>

$(文档).ready(函数(){
//提交时
函数_finalvalidate(){
警报(“ppp”);
if(validateName()&validateEmail()&validatePhone()){
警报(“正常”);
返回真值
}
否则{
警报(“假”);
返回false;
}
}
});
采取行动

如果希望从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>

函数_finalvalidate(){
警报(“ppp”);
if(validateName()&validateEmail()&validatePhone()){
警报(“正常”);
返回真值
}
否则{
警报(“假”);
返回false;
}
}
采取行动
选项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>

var _最终有效期;
$(文档).ready(函数(){
_finalvalidate=函数(){
警报(“ppp”);
if(validateName()&validateEmail()&validatePhone()){
警报(“正常”);
返回真值
}
否则{
警报(“假”);
返回false;
}
};
});
采取行动

为了将其保存在jQuery中,我会给您的div一个id标记,并使用jQuery onclick事件调用它。另外,您确定要在if或逻辑ands中执行按位
&
操作吗

<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>

$(文档).ready(函数(){
$('#callme')。单击(函数(){
警报(“ppp”);
if(validateName()&&validateEmail()&&validatePhone()){
警报(“正常”);
返回true;
}否则{
警报(“假”);
返回false;
}
}
});

您试图调用的窗口范围中不存在您的函数。我会将您的代码更改为:

<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>

$(文档).ready(函数(){
//提交时
$(“#操作”)。单击(函数(){
警报(“ppp”);
if(validateName()&validateEmail()&validatePhone()){
警报(“正常”);
返回真值
}否则{
警报(“假”);
返回false;
}
});

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>

在这种情况下,您不再需要jQuery了。

如果您正在使用jQuery,您应该将您的事件与jQuery的事件绑定。但是,关于它不起作用的原因,这里有一些关于JS范围规则的信息


您声明稍后使用的任何函数都不应在jquery document ready回调中。您无法获取它,因为它隐藏在函数中,函数提供了您无法从外部访问的私有范围

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

代码的问题在于,函数没有在全局上下文中定义,而是在document.ready回调函数中定义。因此,当浏览器获得onclick并对字符串进行求值时,它在全局上下文中找不到该函数名。您可以通过多种不同的方法修复它:

1) 更改要在全局范围中定义的函数,如下所示:

//On Submitting
window._finalvalidate = function(){
2) 将
\u finalvalidate()
函数移到
document.ready()
之外,使其处于全局范围内。它没有理由位于
document.ready()
中,因为它没有立即执行


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

我认为他希望答案使用jQuery来详细说明,这将函数放在全局名称空间中(这显然是您想要的)。如前所述,您的函数是传递给
文档的匿名函数的局部变量。ready
,并且只在该匿名函数内部可见。感谢您的回答。您是否告诉我,无法通过“onclick”事件直接从我的div调用它?(是不是很好的做法)谢谢大家的回答,这很有帮助。我决定使用上面的第一个例子,它非常完美
//On Submitting
window._finalvalidate = function(){