我理解了一下因为这篇文章: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>
答案 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。