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 =(");
}

显然,警报永远不会触发。因此,检查为 onclick 生成的 HTML(特别格式化以查看相似之处):

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 回答