2012-07-12 122 views
2

我的代碼是像下面,A4J:commandLink用的onClick返回true或false無法正常工作

<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,它應該打電話給患者NotePresBackingBean.sendPrescriptionId對不對?

但它不是調用相同....有什麼理由爲什麼?

+0

它可能是使用'actionListener',IIRC需要一個特殊的方法簽名。你爲什麼不用'action =「...」'來替代? – Thomas 2012-07-12 15:02:50

+0

讓我試試..... – Ketan 2012-07-12 15:06:22

+0

看到我的回答,我以前遇到過你的問題,這就是我找到的解決方案。 – 2012-07-12 15:11:16

回答

7

當你看到生成的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代碼將不會觸發,因爲你在執行代碼之前返回的東西。如果您的方法返回true,則更改將僅截取false值並執行返回,其餘代碼將被執行。

注意:默認情況下,任何不返回任何內容的javascript方法都會返回false。

+0

不,我檢查...#{行}將返回datatable的rowIndex,因此它是下面的東西** javascript:return pharmacyCheck('4');; A4J.AJAX.Submit('j_id_jsp_1779705005_0','prescriptionId',event ,{ '的onComplete':功能(請求,事件,數據){openSignatureModel();}, 'similarityGroupingId': 'prescriptionId:patientNotePresListId:4:requestText', '參數':{ 'prescriptionId:patientNotePresListId:4:requestText': 'prescriptionId:patientNotePresListId:4:requestText','processOfPrescription':'Send','sendPrescriptionId':1002},'actionUrl':'/ Oscer/pages/PatientsNotePreDetail.jsf'}); return false; ** – Ketan 2012-07-12 15:10:26

+0

那麼,我真的不知道整個生成的HTML如何用於特定的鏈接,但與其他任何JavaScript方法一樣,如果您在某處返回任何內容,則其餘代碼將不會執行。這就是爲什麼你應該在返回任何內容之前添加驗證。 – 2012-07-12 15:13:05

+0

OMG你是完美的親愛的...我添加了你在我的代碼中說**如果(!pharmacyCheck('#{row}'))返回false; **和它的工作......但我仍然無法理解什麼這條線的意思是...你能解釋我... – Ketan 2012-07-12 15:18:40