2008-09-16 4 views
11

यदि आपके पास JSF <h:commandLink> है (जो <a> की वर्तमान प्रपत्र सबमिट करने के लिए उपयोग करता है), तो कार्रवाई के पहले आप जावास्क्रिप्ट को निष्पादित कैसे करते हैं (जैसे हटाने की पुष्टि के लिए पूछना)?जेएसएफ <h: commandLink> कार्रवाई करने से पहले मैं जावास्क्रिप्ट को कैसे निष्पादित कर सकता हूं?

+1

संबंधित: http://stackoverflow.com/questions/4571488/confirmation-on-submit – BalusC

+0

@ BalázsMáriaNémeth आप कृपया मुझे समझा सकते हैं कि वे किस तरह नहीं कर रहे हैं? – EJP

उत्तर

7
<h:commandLink id="myCommandLink" action="#{myPageCode.doDelete}"> 
    <h:outputText value="#{msgs.deleteText}" /> 
</h:commandLink> 
<script type="text/javascript"> 
if (document.getElementById) { 
    var commandLink = document.getElementById('<c:out value="${myPageCode.myCommandLinkClientId}" />'); 
    if (commandLink && commandLink.onclick) { 
     var commandLinkOnclick = commandLink.onclick; 
     commandLink.onclick = function() { 
      var result = confirm('Do you really want to <c:out value="${msgs.deleteText}" />?'); 
      if (result) { 
       return commandLinkOnclick(); 
      } 
      return false; 
     } 
    } 
} 
</script> 

अन्य जावास्क्रिप्ट कार्यों (प्रपत्र इनपुट आदि मान्य की तरह) एक और समारोह के लिए एक कॉल के साथ confirm() करने के लिए कॉल की जगह द्वारा किया जा सकता है।

1

आप अभी भी ऑनक्लिक का उपयोग कर सकते हैं। जेएसएफ render kit specification (एनकोड व्यवहार देखें) वर्णन करता है कि लिंक को इसे कैसे संभालना चाहिए।

var a=function(){/*your onclick*/}; var b=function(){/*JSF onclick*/}; return (a()==false) ? false : b(); 

तो अपने समारोह अभ्यस्त घटना वस्तु (जो विश्वसनीय पार फिर भी ब्राउज़र नहीं है) पारित किया जाना है, लेकिन लौटने सही/गलत इच्छा शॉर्ट सर्किट: यहाँ महत्वपूर्ण हिस्सा (क्या यह onclick के लिए renders) है प्रस्तुत करने।

+0

मैं पर एक ऑनक्लिक विशेषता जोड़ने में सक्षम नहीं हूं। मुझे निम्न त्रुटि प्राप्त होती है: org.apache.jasper.compiler.CompileException: /MyPage.jsp(164,4) विशेषता निर्दिष्ट TLD के अनुसार अमान्य पर क्लिक करें मैंने समाधान के अनुरोध करने वाले फ़ोरम पर कई अन्य लोगों को भी देखा है इस तरह। –

0

जेएसएफ 1.2 में आप ऑनक्लिक घटनाओं को निर्दिष्ट कर सकते हैं।

इसके अलावा, MyFaces या IceFaces जैसे अन्य पुस्तकालय "ऑनक्लिक" हैंडलर को लागू करते हैं।

क्या आप तो सब करने की ज़रूरत होगी बस है:

<h:commandLink action="#{bean.action}" onclick="if(confirm('Are you sure?')) return false;" /> 

नोट: यदि आप सिर्फ return confirm(...) के रूप में इस, ऐसा होने से onClick ईवेंट में जावास्क्रिप्ट के बाकी को अवरुद्ध कर देगा जो प्रभावी रूप से होगा ऐसा नहीं कर सकते आपकी कार्रवाई को रोकने से रोकें इससे कोई फर्क नहीं पड़ता कि उपयोगकर्ता क्या लौटा!

0

यदि आप फ़ॉर्म पोस्ट करने से पहले कुछ निष्पादित करना चाहते हैं, उदाहरण के लिए पुष्टि के लिए, सबमिट ईवेंट पर आज़माएं। कुछ की तरह:

myform.onsubmit = function(){confirm("really really sure?")}; 
0

यह मेरे लिए काम नहीं,

onclick="if(confirm('Are you sure?')) return false;" /> 

लेकिन ऐसा किया

onclick="if(confirm(\"Are you sure?\"))return true; else return false;" 
+0

मैं पर एक ऑनक्लिक विशेषता जोड़ने में सक्षम नहीं हूं। मुझे निम्न त्रुटि मिलती है: org.apache.jasper.compiler.CompileException:/MyPage।जेएसपी (164,4) निर्दिष्ट टीएलडी के अनुसार अमान्य पर क्लिक करें मैंने इस तरह के समाधान का अनुरोध करने वाले मंचों पर कई अन्य लोगों को भी देखा है। –

+0

@ अनुदान वैगनर, मुझे लगता है कि अब यह साल का एक बहुत है, लेकिन शायद कार्यान्वयन आप समय पर इस्तेमाल किया – akostadinov

14

इस

onclick="return confirm('Are you sure?');" 
+0

हास्यास्पद है कि 'निर्माणों कुछ अनुभव के साथ डेवलपर्स द्वारा नीचे सभी पोस्ट में सुझाव दिया है if' .. और भी अधिक हास्यास्पद मैं टूट गया था 'उन लोगों से :) – akostadinov

0
var deleteClick; 
var mess="xxx"; 
function assignDeleteClick(link) { 
    if (link.onclick == confirmDelete) { 
     return; 
    } 
    deleteClick = link.onclick; 
    link.onclick = confirmDelete; 
} 


function confirmDelete() { 
    var ans = confirm(mess); 
    if (ans == true) { 
     return deleteClick(); 
    } else { 
     return false; 
    } 
} 
की तरह सरल किया जा सकता

जेएसएफ 1.1 के लिए इस कोड का उपयोग करें।

7

यह मेरे लिए काम किया:

<h:commandButton title="#{bundle.NewPatient}" action="#{identifController.prepareCreate}" 
              id="newibutton" 
              onclick="if(confirm('#{bundle.NewPatient}?'))return true; else return false;" 
              value="#{bundle.NewPatient}"/> 
+10

'onclick = के रूप में सरल किया जा सकता है कि शिक्षा हूँ" वापसी की पुष्टि (' आपको यकीन है? ') "'। एक बुलियन मूल्य वापस करने के लिए एक बुलियन मूल्य की जांच करना अनावश्यक है। बस इसे सीधे वापस करें। – BalusC

+0

क्या प्राइमफेस में उपरोक्त को लागू करने के लिए '' का उपयोग करके कोई आसान तरीका है? – Robert

संबंधित मुद्दे

 संबंधित मुद्दे