3

我想在选择错误类型的文件时删除错误消息。我点击了链接http://forum.primefaces.org/viewtopic.php?f=3&t=23853

<p:fileUpload fileUploadListener="#{userProfileUpdateController.upload}"         
    widgetVar="fileuplaodWgt"                     
    allowTypes="/(\.|\/)(gif|jpe?g|png)$/"
    description="Select Images"
    update="userPhoto"
    mode="advanced"/>

我进口<h:outputScript name="library.js" library="script"></h:outputScript>

在 library.js 中

$(document).ready(function(){
   alert(fileuplaodWgt);
   fileuplaodWgt.buttonBar.find("button.cancel").bind("click", function(e){
   clearInvalidFileMsg();
    });
});

function clearInvalidFileMsg(){
    fileuplaodWgt.uploadContent.find("tr.ui-state-error").remove();
 }

在上面写完之后,我的页面中没有显示文件上传。当我跟踪我的 library.js 文件时,我发现fileuplaodWgt ReferenceError: fileuplaodWgt is not defined。我在 Mozilla 和 chrome 中尝试过。他们都没有显示我的文件上传。你能帮我解决我的问题吗???

4

1 回答 1

1

PrimeFaces 也通过$(function()). 包含命令的<script>内容直接在组件之后呈现。因此,如果您在小部件 var one之前$(document).ready()被调用,那么它将找不到小部件 var,因为它稍后会被初始化。您需要确保在渲染组件调用您的。其中一种方法是将脚本重新定位到 HTML 的末尾。$(document).ready()<body>target="body"

<h:outputScript name="library.js" library="script" target="body" />

这样,当到达文档末尾时,脚本会被加载和初始化,因此所有小部件 var 初始化之后。

另一种方法是使用$(window).load()而不是$(document).ready(),但这很笨拙并且可能更慢,因为它仅在加载文档中引用的所有图像时才调用。


与具体问题无关,您使用资源library的方式不正确。请仔细阅读JSF资源库是干什么用的,应该如何使用?并使用

<h:outputScript name="script/library.js" target="body" />

顺便说一句,您在小部件 var 名称中还有一个令人不安的错字,与问题没有进一步的关系。是上传,不是上传

于 2013-01-09T11:45:16.973 回答