2011-11-30 72 views
4

我明白一點,因爲這個職位: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> 

回答

5

這樣做會是這樣的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了。

+0

謝謝大家的回答,這對我們幫助很大。我決定使用上面的第一個例子,它是完美的 – Joel

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

我認爲他想要使用JQuery的答案 –

+0

詳細說明,這將函數放入全局命名空間(顯然是你想要的)。正如所寫,您的函數是傳遞給'document.ready'的匿名函數的局部變量,並且只會在該匿名函數內部可見。 – harpo

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

感謝您的回答。你是否告訴我,用「onclick」事件直接從我的div調用它是不可能的? (無論是否它的良好做法) – Joel

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 
0

您的代碼問題在於您的函數沒有在全局上下文中定義,而是它在document.ready回調函數中定義。因此,當瀏覽器獲得onclick並對字符串進行評估時,它在全局上下文中找不到該函數名稱。你能解決這個問題的一些不同的方式:

1)更改功能在全球範圍內被定義如下:

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

2)將您的_finalvalidate()功能document.ready()外側,以便它在全球範圍。沒有理由在document.ready(),因爲它沒有馬上執行。

3)更改爲指定事件處理程序的「jQuery」方式,而不是將Click = xxx放在HTML中,因爲Cory在他的答案中已經說明了這一點。

相關問題