1

現在、私のページには、二重送信を防ぐために、クリックすると無効になる送信ボタンがあります。

<tr:commandButton onclick="this.disabled=true;" />

ただし、フォームにエラーがある場合、送信ボタンが無効になっているため、ユーザーはフォームを再送信できません。

フォームの検証をクリアしたときにのみ送信ボタンを無効にする方法はありますか?

参考までに、私のページは次のようになります。

<rich:tabPanel headerAlignment="left" switchType="client" width="100%">
    <rich:tab label="#{cfsMsgs.main_tab_label}" name="mainTab">
        <rich:spacer height="20" />
        <ui:include src="add_main.xhtml" />
    </rich:tab>
    <rich:tab label="#{cfsMsgs.qualification_tab_label}" name="qualificationTab">
        <rich:spacer height="20" />
        <ui:include src="add_qualification.xhtml" />
    </rich:tab>

    <!-- ...and so on... -->

そして、各タブには、次のような検証方法が混在しています。

<tr:inputText ...>
    <tr:validateRegExp pattern="^\S.*" ... />
</tr:inputText>

...と

<tr:inputText validator="#{backingBean.validate}" ...>
</tr:inputText>

ボタンをonclick="this.disabled = [ページエラーインジケーター、たとえばpage.hasErrorなど] "のように設定することはできますか?

編集1:別の方法は、ページの送信に失敗した場合にボタンを再レンダリングすることです。次のようにコードを変更しました。

<tr:commandButton onclick="this.disabled=true;" id="btnSubmit">
    <a4j:support event="oncomplete" reRender="btnSubmit" ajaxSingle="true" oncomplete="alert('done!');" />
</tr:commandButton>

a4j:supportのoncompleteイベントは、それが行われたかどうかを確認するためのものです。しかし、これを実行しようとすると、アラートは表示されませんでした。それは私がここで何か間違ったことをしているという意味ですか?

4

3 に答える 3

0

よくわかりませんが、試したことはありますか。

<tr:commandButton onsubmit="this.disabled=true;" />
于 2011-10-21T04:05:25.073 に答える
0

ボタンタグ:

<asp:Button ID="Submit" runat="server" Text="Submit"
            Width="150" OnCommand="GoFromHere" CommandArgument="2"
            OnClientClick="disableSubmitButtons()" />

HTMLの場合:

<input type="submit" value="Submit" onclick="disableSubmitButtons()" />
<script type="text/javascript">
//disable the button and do nothing if user clicks a second time
function disableSubmitButtons() {
    event.srcElement.onclick = doDisable;
}
function doDisable(){
    event.srcElement.disabled=true;
}

</script>
于 2012-06-25T16:31:35.890 に答える
0

これは私にとって非常にうまく機能します(javaScriptに基づく):

//Initialize our submit flag to false
var formSubmitted = false;

/**
 * Prevent from submitting a form more than once
 * @returns {Boolean}
 */
function submitForm()
{   
  //has the form been submitted before?
  if( formSubmitted == true )
  {
     alert("This form has already been submitted!");
     return false;
  }
  formSubmitted = true;

  return true; // Submit form
}

そしてそれを適用しますcommandButton

<h:commandButton action="#{bean.action}" onclick="return submitForm();"/>
于 2012-06-26T10:16:31.827 に答える