【问题标题】:jQuery function is not calling from JSF on button clickjQuery 函数不是在按钮单击时从 JSF 调用
【发布时间】:2012-02-08 07:28:05
【问题描述】:

我有一个包含函数的 jQuery 文件。当我的页面加载时,我的脚本就会运行。表示调用。这是我的 jQuery 文件。

(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() 函数未定义。为什么? 我在这里做错了什么?

谢谢

【问题讨论】:

    标签: jquery jsf-2


    【解决方案1】:

    尝试删除

    (function($){

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

    来自 js 文件

    相反,用这个地方包装你的 js 代码

    $(document).ready(function() {
    
    });
    

    还有一件事

    编辑:

    将其添加到页面顶部

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

    为了在你的 jQuery 代码中使用 $

    【讨论】:

    • 你的小费解决了我的一个困惑。实际上发生了什么,当我在我的 jsf 页面上使用 &lt;h:outputScript library="javascripts" name="validation.js"/&gt; 并且我的脚本中有 (function($){...})(jQuery) 时,我的脚本在页面加载之前运行。当我的页面加载时,页面上没有任何内容,但我的脚本正在运行。所以我得到 var$firstPara null。这就是我使用 target="body" 的原因。有了这个,我的脚本包含在 body 元素之后。但是现在当我使用 $(document).ready(function(){...}); 并省略了 target="body".
    • 然后我的脚本包含在 head 部分中,并且我的脚本在页面加载后运行:)。我使用了(function($){...})(jQuery) 语法,因为我也使用 PrimeFace。所以如果我使用$(document).ready(fn),那么就会有冲突。 $(document).ready(fn)(function($){})(jQuery); 是两个不同的东西还是两者都一样?
    • 嗯谢谢。还有一件事,当我们使用 jQuery 时,首先我们包含 jQuery。我正在使用 jQery-1.7.1.js。我只是想确定序列。首先我将包含行&lt;h:outputScript library="primefaces" name="jquery/jquery.js" target="head" /&gt;,然后是&lt;h:outputScript target="head"&gt;$ = jQuery;&lt;/h:outputScript&gt;,然后是我的jQuery &lt;h:outputScript library="javascripts" name="jquery.js" target="head"/&gt;,然后是我的脚本&lt;h:outputScript library="javascripts" name="validation.js" target="head"/&gt;,然后我可以在我的脚本中使用$(document).ready(fn)。我说的对吗?
    【解决方案2】:

    Welp,除了我刚刚做的少量谷歌搜索之外,我不知道 JSF 是什么,而且我也不熟悉您使用的一些 jQuery 语法。假设您可以像处理任何常规的旧 html 页面一样处理 JSF 页面,这就是我的做法......

    $(function() {
        // Do any work you want to occur when the DOM is ready here.
    
        $("#saveButton").click(checkValidation);
    }
    
    function checkValidation() {
        // Check validation here
    } 
    

    然后在 JSF 中去掉你的 onclick 位。

    【讨论】:

    • 谢谢。但有一件事,如果我在 $(function() {})(jQuery); 之外定义我的 checkValidation() 函数。然后在我的 onClick 上调用。似乎 JSF 比 jQuery 对 javaScript 有更大的灵活性...
    • 是的,它会被称为onClick。函数通常应该放在 $(function() {...}) 之外。里面的内容是您希望仅在 DOM 加载后发生的事情。这包括将事件连接到 DOM 元素,这是我使用 .click() 位所做的。
    • HHmm 实际上我是新手,所以我认为所有 jQuery 代码都应该在 $(document).ready(fn) 内。你的意思是说如果我想在页面加载时隐藏页面上的某些段落,那么这段代码应该在$(document).ready(fn) 内。但是如果我想监听点击事件,那么我可以把它放在我的$(document).ready(fn)之外。是吗?
    • 关于隐藏段落,是的。关于监听点击事件,您可以在 document.ready 中指定要监听的内容,并且您可以将在听到 click 时调用的函数放在 document.ready 之外。所以在我的例子中,我告诉它用 $("#saveButton").click(checkValidation);就像我从这里开始说的那样,当听到点击 #saveButton 时,执行括号内的操作,在这种情况下是调用 checkValidation 函数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多