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