“函数”在Javascript中没有定义错误:什么是调用我的函数的正确方法?
我明白一点,因为这个职位:JQuery, setTimeout not working为什么它不工作,但保持一切这样,什么是正确的方式来呼吁_finalvalidate()
内我的div?“函数”在Javascript中没有定义错误:什么是调用我的函数的正确方法?
<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>
这样做会是这样的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了。
如果你想从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>
我认为他想要使用JQuery的答案 –
详细说明,这将函数放入全局命名空间(显然是你想要的)。正如所写,您的函数是传递给'document.ready'的匿名函数的局部变量,并且只会在该匿名函数内部可见。 – harpo
为了保持它在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>
您的函数不存在于您要调用它的窗口范围内。我想你的代码更改为:
<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>
感谢您的回答。你是否告诉我,用“onclick”事件直接从我的div调用它是不可能的? (无论是否它的良好做法) – Joel
如果您使用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
您的代码问题在于您的函数没有在全局上下文中定义,而是它在document.ready回调函数中定义。因此,当浏览器获得onclick并对字符串进行评估时,它在全局上下文中找不到该函数名称。你能解决这个问题的一些不同的方式:
1)更改功能在全球范围内被定义如下:
//On Submitting
window._finalvalidate = function(){
2)将您的_finalvalidate()
功能document.ready()
外侧,以便它在全球范围。没有理由在document.ready()
,因为它没有马上执行。
3)更改为指定事件处理程序的“jQuery”方式,而不是将Click = xxx放在HTML中,因为Cory在他的答案中已经说明了这一点。
谢谢大家的回答,这对我们帮助很大。我决定使用上面的第一个例子,它是完美的 – Joel