2012-02-08 13 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

Welpは、私は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> 

の頭の中でこれを追加します。しかし、私がcheckValidation()関数を '$(function(){})(jQuery);の外で定義すると、その後、私のonClickで呼び出されます。 JSFはjQueryよりもJavaScriptの柔軟性が高いようです... – Basit

+0

はい、それはonClickと呼ばれます。関数は、通常、$(function(){...})の外側に配置する必要があります。内部に入るのは、DOMがロードされたときにのみ実行したいものです。これは、私がそこで.click()ビットで行ったことであるDOM要素までのイ​​ベントのフックを含みます。 – Carter

+0

HHmm実際には私は新しいので、すべてのjQueryコードは '$(document).ready(fn)'の内側にあるべきだと思っていました。あなたがページが読み込まれたときに私のページ上の段落を隠したいのですか?コードは '$(document).ready(fn)'の中になければなりません。しかし、私がクリックイベントを聞きたければ、私は '$(document).ready(fn)'の外に置くことができます。それは...ですか? – Basit

1

は、この場所で

$(document).ready(function() { 

}); 
をあなたのJSコードをラップし、代わりに

ファイルとJSから

(function($){

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

を削除しよう

もう一つ

EDIT:

はあなたのjQueryのコード

+0

あなたのヒントは私の混乱を解決します。実際に何が起きていたのか、私は ''私のjsfページで '(function($){...})(jQuery) 'を実行すると、スクリプトがページが読み込まれる前に実行されます。私のページが読み込まれるとき、私はページに何も持っていないが、私のスクリプトが実行されていた。だから私はvar $ firstPara nullを取得します。それが私が** target = "body" **を使う理由です。これで、私のスクリプトは、body要素の後に含まれています。しかし今、 '$(document).ready(function(){)});を使用し、** target =" body "**を省略しました。 – Basit

+0

私のスクリプトは頭のセクションに含まれていると私は私のスクリプトがページの読み込み後に実行している:)。私は '(function($){...})(jQuery)'構文を使用しました。なぜなら私もPrimeFaceを使用しているからです。ですから、 '$(document).ready(fn)'を使用すると、競合が発生します。 '$(document).ready(fn)'と '(function($){})(jQuery);' 2つの異なるもの、あるいはその両方が同じですか? – Basit

+0

あなたのjsコードで$を使う方法を編集してください。 – Daniel

関連する問題