【问题标题】:Updating Primefaces Component Value with function in javascript在 javascript 中使用函数更新 Primefaces 组件值
【发布时间】:2013-02-05 15:04:01
【问题描述】:

我想更新我的组件值 evry 10 keyup ,所以我写了以下代码:

<h:body>
   //***************************JAVAScript function**************
<SCRIPT LANGUAGE="JavaScript">
 function fnc(){
                length=document.getElementById("aa").value.length;
                 if(length == 10)
                                {
                        document.getElementById("aa").value ="";

                                }

                }

<ui:composition template="commonLayout.xhtml">

    <ui:define name="content">
        <section id="main" class="column">
        <h4 class="alert_info">Scannez les bonbonnes puis cliquez sur
            enregistrer :</h4>
        <div class="Saut20px">

            <h:form id="form">
                <p:panel id="panel" header="Register">

                    <br />
                    <p:focus context="panel" />
                    <p:growl id="msgs"></p:growl>


                    <h:outputLabel value="Code Barre :" />

  //*****************call function in onComplete******
   <p:inputText id="aa" value="#{bonBonneManagedBean.sel}">
                        <p:ajax event="keyup" update="koko msgs" oncomplete="fnc()"
                            listener="#{bonBonneManagedBean.ajouterSelected(bonBonneManagedBean.sel)}" />
                    </p:inputText>

但是电话打不通,如果你能帮我找出错误,提前谢谢

【问题讨论】:

  • 功能需求难以理解。您想每 10 个字符提交并清除输入值吗?
  • 顺便问一下,您是从哪里学习 HTML 和 JS 的? &lt;SCRIPT LANGUAGE="JavaScript"&gt; 风格与 90 年代史前教程/书籍中的风格非常相似。尽量确保您阅读的是最新资源。

标签: javascript html jsf primefaces


【解决方案1】:

您在这里遇到的问题很少。首先你的cmets,它们可能只是存在于这个问题中,而不是存在于代码中,所以我不会谈论它们。

正如 BalusC 所写,您正在使用某种奇怪的脚本标签定义形式,我必须承认我从未见过这样的东西。另一方面,您正在使用section 标签,据我所知,它是 HTML5 标签,并准备好它不适用于不支持 HTML5 的浏览器。

您创建了 AJAX 事件,该事件将在输入字段上的每个 keyup 事件上被调用......好吧,这里会有很多请求。我建议你避免这种情况。

您的具体问题是您尝试查找 id 为 aa 的元素,但我必须说没有这样的元素。 JSF 将来自命名容器的 ID 连接起来,因此您的输入将具有类似 form:aa 的 id,如果周围页面中有更多命名容器,可能还会有更多的 ID。您可以检查页面生成的 HTML 代码,并查看输入组件的真实 ID。在另一种情况下,您可以执行以下操作:

<p:inputText id="aa" onkeyup="fnc(this)" value="#{bonBonneManagedBean.sel}"/>

使用此解决方案删除 ajax 标记。

并将您的 fnc 更改为:

function fnc(inputComponent)
{
  length = inputComponent.value.length;
  if(length == 10)
  {
    inputComponent.value = "";
  }
 }

最后,我真的认为你在玩 JSF 和 JavaScript,我真的看不出这有什么用处。

【讨论】:

  • 非常感谢您的回复,我有最后一个问题,如何调用两个函数:Java 和 Javascript,在 InputText 上有一个 KeyUp 事件
【解决方案2】:

尝试使用inputtext组件的onkeyup属性;

 <p:inputText id="aa" onkeyup="fnc()" value="#{bonBonneManagedBean.sel}">

祝你好运!

【讨论】:

  • 提醒你的js? onkeyup 属性应该调用你的 js 函数并发布你的 js 控制台输出请
  • --js 控制台:[15:57:13,602] ReferenceError: fnc is not defined @localhost:8080/OxynordProjet/view/AjouterChargement.aspx:1
  • 这意味着 fnc 被调用但未成功定义,在 inputtext 组件上方再次定义它并确保它已定义
  • 感谢您的回答。我还有其他问题:-- [17:00:38,587] TypeError: document.getElementById(...) is null @...
  • 我更喜欢 firefox 的 firebug 插件来调试你的 javascripts 来解决这些情况。
猜你喜欢
  • 2016-09-27
  • 2015-01-01
  • 2016-10-21
  • 1970-01-01
  • 2015-04-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多