2012-02-08 84 views
0

我有一個jQuery文件,其中包含函數。當我的頁面加載,然後我的腳本運行。意味着它被調用。這是我的jQuery文件。jQuery函數不是從JSF調用按鈕點擊

(function($){ 

    var $firstPara = $('p').eq(1); 
    $firstPara.hide(); 

    function checkValidation() { 

     var labelElementArray = $("label.mandotary"); 
     var inputElementArray = $("input.mandotary"); 
     var selectElementArray = $("select.mandotary"); 

     $.each(inputElementArray, function(index, element){ 

      var text = $(element).text(); 


     }); //end of $.each(inputElementArray, fn) 

     $.each(selectElementArray, function(index, element) { 

      ////nothing 

     }); //end of $.each(selectElementArray, fn) 

    } //end of function checkValidation() 

})(jQuery); //end of (function($){} 

我有JSF窗體中的按鈕。

<h:head> 
    <title>Facelet Title</title> 
    <h:outputScript library="javascripts" name="jquery.js" target="body"/> 
    <h:outputScript library="javascripts" name="validation.js" target="body"/> 

</h:head> 

<h:body> 

    <h:form id="validationFrom" > 

     <h:commandButton id="saveButton" 
         value="Save" 
         onclick="checkValidation()"/> 


     <h:commandButton id="cancelButton" 
         value="Cancel" /> 

    </h:form > 

</h:body> 

現在,當我點擊保存按鈕,它說checkValidation()函數是未定義的。爲什麼? 我在這裏做錯了什麼?

感謝

回答

1

韋爾普,我不知道什麼是JSF比谷歌搜索我只是做了,我也不熟悉一些你正在使用jQuery的語法的少量其他。假設你可以對一個JSF頁面的工作與任何普通的舊的HTML頁面,這裏是我會怎麼做呢?

$(function() { 
    // Do any work you want to occur when the DOM is ready here. 

    $("#saveButton").click(checkValidation); 
} 

function checkValidation() { 
    // Check validation here 
} 

然後得到在JSF擺脫你的onclick位。

+0

由於添加在專頁

<h:outputScript library="primefaces" name="jquery/jquery.js" target="head" /> <h:outputScript target="head"> $ = jQuery; </h:outputScript> 

的。但有一點,如果我在'$(function(){})(jQuery);'之外定義我的checkValidation()函數''。然後它是我的onClick調用。看起來,JSF比jQuery具有更多的靈活性,對於javaScript ... – Basit 2012-02-08 11:13:53

+0

是的,它將被稱爲onClick。函數通常應放在$(function(){...})之外。裏面的東西只有在DOM加載時纔會發生。這包括將事件掛鉤到DOM元素,這是我在.click()位做的事情。 – Carter 2012-02-08 17:46:24

+0

HHmm其實我是新的,所以我認爲所有的jQuery代碼應該在'$(document).ready(fn)'裏面。你的意思是說如果我想在頁面加載的時候在頁面上隱藏一些段落,那麼這個代碼應該放在'$(document).ready(fn)'裏面。但是,如果我想傾聽點擊事件,那麼我可以把它放在我的'$(document).ready(fn)'之外。是嗎? – Basit 2012-02-09 04:56:13

1

嘗試刪除

(function($){

})(jQuery); //end of (function($){}

從JS文件

,而是,這個地方的

$(document).ready(function() { 

}); 
包裝你的js代碼

一件事

編輯:

在頭上,以使用$在jQuery代碼

+0

你的小費解決了我的一個困惑。實際上發生了什麼,當我使用''在我的jsf頁面上,我有'(function($){...})(jQuery)'在我的scrpt中,然後我的腳本在頁面加載之前運行。當我的頁面加載,然後我沒有在頁面上,但我的腳本正在運行。所以我得到var $ firstPara null。這就是爲什麼我使用** target =「body」**。有了這個,我的腳本在body元素之後。但是現在當我使用'$(document).ready(function(){...});'並且省略** target =「body」**。 – Basit 2012-02-08 11:10:25

+0

然後我的腳本包含在頭部分,並且我的腳本在頁面加載後運行:)。我使用'(函數($){...})(jQuery)'語法,因爲我也使用PrimeFace。所以如果我使用'$(document).ready(fn)',那麼就會有衝突。是'$(document).ready(fn)'和'(function($){})(jQuery);'兩個不同的事物或兩者是相同的? – Basit 2012-02-08 11:11:48

+0

檢查編輯,多數民衆贊成你如何使用$在您的js代碼 – Daniel 2012-02-08 11:30:00