3

私のコードは以下のようなものです、

<a4j:commandLink  oncomplete="openSignatureModel();" id="requestText"  reRender="sigPassword"  title="Send Prescription"
actionListener="#{patientNotePresBackingBean.sendPrescriptionId}"
onclick="return pharmacyCheck('#{row}');"> 
<f:param name="sendPrescriptionId" value="#{patientNotePrescriptionVar.id}" />
<f:param name="processOfPrescription" value="Send" />
<h:graphicImage value="/images/send-prescribe.png" style="border:0;"></h:graphicImage>
</a4j:commandLink>

そして私のJavaスクリプトは...

function pharmacyCheck(rowID) {
    var a = document.getElementById("prescriptionId:patientNotePresListId:"+rowID+":pharmacyRcopiaId");
    if(a.value == -1) {
        alert("Please select Pharmacy");
        return false;
    } else {
        return true;
    }

}

実際に true を返すときは、patientNotePresBackingBean.sendPrescriptionIdを呼び出す必要がありますよ ね?

しかし、それは同じとは言えません....理由はありますか?

4

1 に答える 1

9

生成された HTML を見ると、ボタン/リンクの onclick メソッドに次のようなものが表示されます。

onclick="return pharmacyCheck('#{row}');;A4J.AJAX.Submit(..."

そのため、最初に onclick が返され、ajax 送信が送信されません。問題を解決するには、JavaScript メソッドを次のように使用します。

<a4j:commandLink onclick="if (!pharmacyCheck('#{row}')) return false;" ...>

編集:さらなる説明:

次のような JavaScript コードがある場合:

function X() {
    return false;
    alert("this alert won't be shown =(");
}

明らかに述べたように、アラートは決して発生しません。したがって、生成された HTML で onclick をチェックします (類似性を確認するために特別にフォーマットされています)。

onclick="
    return functionX();
    alert('this alert will not display either X_x');
    A4J.AJAX.Submit(...
"

コードを実行する前に何かを返すため、onclick コードは起動しません。falseメソッドが を返す場合、変更は値をインターセプトしてリターンを行うだけtrueで、残りのコードが実行されます。

注: デフォルトでは、何も返さない JavaScript メソッドは false を返します。

于 2012-07-12T15:04:09.353 に答える