2017-05-24 70 views
1

FileUploadコンポーネントの「選択」ボタンにリスナーを追加することはできますか?p:fileUploadの選択ボタンにリスナーを追加する方法

アドバンストモードでは、p:fileUploadを使用します。

私はドキュメンテーションを経て、それだけで「アップロード」ボタンをクリックした後にトリガされfileUploadListenerをサポートしています。(あまりのactionListener、validationListenerを試してみました)PrimeFacesの

バージョンは5.3です。 Pの

定義:ファイルアップロード:ここ

<p:fileUpload 
          fileUploadListener="#{ipchYonetimiController.handleFileUpload}" 
          widgetVar="aras" 
          mode="advanced" dragDropSupport="false" update="@this toplumsgs" 
          sizeLimit="100000" fileLimit="1" 
          cancelLabel="İptal et" allowTypes="/(\.|\/)(xlsx)$/" 
          invalidSizeMessage="Dosya boyutu çok büyük" 
          invalidFileMessage="Dosya formatı xlsx olmalı" 
          fileLimitMessage="Sadece bir dosya yükleyebilirsiniz" /> 

が、私はそれを必要とする理由イメージがある: enter image description here

私は基本的にユーザーが選択したボタンをクリックしたときに検証エラーをクリアしたいです。選択ボタンはfileUploadコンポーネントでラップされているため、リスナーを割り当てることはできません。

は、このリンクでコードを微調整し、ボタンにリスナーを追加しようとしましたが、何の成功:

PF('aras').chooseButton.addEventListener(...) 

How to disable Choose button in PrimeFaces FileUpload until the upload is complete

+0

いや、問題は、ファイルが「handleFileUpload」に有効な内容を持っているか、いない場合は、私がチェックし、あります。問題があれば、このような検証例外がスローされます(値は英語の行1の数値でなければなりません)。その後、ユーザーがxlsxファイルを修正してもう一度「選択」した場合(アップロードするのではなく、単に選択した場合)、その検証エラーはクリアされます。基本的には、ユーザーが「選択」ボタンをクリックすると、すべての検証エラーをクリアしたいだけです。私はそれを作成しなかったので(fileUploadコンポーネントに属します)、リスナーを割り当てることはできません。 – sarah

+2

クライアントサイドのすべてがhtml/css/javascriptであることに注意してください。だからあなたは答えが示すようにプレーンhtmlでできるように、**クライアント側のリスナを割り当てることができます**。これはほぼすべてに当てはまります! – Kukeltje

答えて

3

あなたはこれを試みることができる - それが私の作品:

<p:fileUpload id="fileupload" ..... /> 

<script> 
    $(document).on("click", ".ui-fileupload input[type=file]", function(event){ 
     $(this).closest('.ui-fileupload').find('.ui-icon-close').trigger('click'); 
    }); 
</script> 
+0

まあ、試してみましたが動作しませんし、console.logも表示されていますので、関数が呼ばれています。私もui:define(開始タグ)と最後のページ(ui defineの終了タグの前)の後に試しました。このポップアップはp:dialog-> p:panel-> hformにあります。それは問題を引き起こすことができますか?私はそれがうまくいかない場合でもそれを受け入れるつもりです。 – sarah

+1

関数の先頭にある部分がファイルアップロードのIDを指していることを確認する必要があります。あなたのフォームのIDを知っていれば、$( '[id $ = uploadform \\:fileupload]')(コロンのエスケープに注意してください)のように前置する必要があります。あなたはあなたのために動作しない答えを受け入れるべきではありませんbtw :) – lastresort

+1

申し訳ありませんが、スタンドアロンのページで、それは私の両方のh:頭の中でまたは終わりの体の前に私のために働く。多分BalusCがここで行うように:https://stackoverflow.com/questions/11027285/javascript-does-not-work-under-jsf-template。私はちょっと変更して、関連するp内のクローズアイコンをクリックするだけです:fileUpload(そしてすべてではありません) –

1

代わりのファイルアップロードコンポーネントに取り組むあなたは検証メッセージに時間を設定することはできません。参照してください:How to hide after it displayed the messages

2番目のオプションは、エラーメッセージのためにgrowlを使用することです。

EDIT: ユーザーがアップロードボタンをクリックすると、オンスタートイベントが発生して使用できるようになります。

<p:fileUpload onstart="PF('validationMsg').hide()" /> 
+0

あなたの答えをありがとう、私は時間関数が本当に便利なので、それをupvoted。しかし、それは今私の要求を満たしていません。私はクリックする前にメッセージが消えないようにしたい。また、ポップアップの上に検証エラーが表示されるのは、このプロジェクトでは立ち上がりです。とにかくあなたの意見をありがとうと、他のアイデアや知識があれば共有してください。 – sarah

+1

私は自分の答えを更新しました。 –

+0

まあ、私は "選択"ボタンでそれが必要です。残念ながら、onstartはアップロードの開始時にのみ起動されます。 – sarah

関連する問題