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