كيف يمكنني تنفيذ Javascript قبل تنفيذ إجراء JSF <h:commandLink>؟[ينسخ]

StackOverflow https://stackoverflow.com/questions/73628

  •  09-06-2019
  •  | 
  •  

سؤال

هذا السؤال لديه بالفعل إجابة هنا:

إذا كان لديك JSF <h:commandLink> (الذي يستخدم onclick حدث <a> لإرسال النموذج الحالي)، كيف يمكنك تنفيذ JavaScript (مثل طلب تأكيد الحذف) قبل تنفيذ الإجراء؟

هل كانت مفيدة؟

المحلول 2

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

يمكن تنفيذ إجراءات Javascript الأخرى (مثل التحقق من صحة إدخال النموذج وما إلى ذلك) عن طريق استبدال استدعاء confirm() مع استدعاء وظيفة أخرى.

نصائح أخرى

يمكن تبسيطها مثل هذا

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

لقد نجح هذا بالنسبة لي:

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

لا يزال بإمكانك استخدام onclick.جي إس إف تقديم مواصفات المجموعة (راجع سلوك التشفير) يصف كيفية تعامل الارتباط معه.إليك الجزء المهم (ما يتم عرضه عند النقر):

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

لذا، لن يتم تمرير وظيفتك إلى كائن الحدث (الذي لا يمكن الاعتماد عليه عبر المتصفحات على أي حال)، ولكن إرجاع صحيح/خطأ سيؤدي إلى تقصير عملية الإرسال.

في JSF 1.2 يمكنك تحديد أحداث onclick.

بالإضافة إلى مكتبات أخرى مثل وجوهي أو وجوه ثلجية تنفيذ معالج "onclick".

ما عليك القيام به بعد ذلك هو ببساطة:

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

ملحوظة:لا يمكنك أن تفعل فقط return confirm(...) لأن هذا سيؤدي إلى منع حدوث بقية JavaScript في حدث onClick، مما سيؤدي فعليًا إلى إيقاف الإجراء الخاص بك بغض النظر عما أعاده المستخدم!

إذا كنت تريد تنفيذ شيء ما قبل نشر النموذج، للتأكيد على سبيل المثال، فجرّب حدث النموذج onSubmit.شيء مثل:

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

هذا لم ينجح معي أبداً،

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

لكن هذا حدث

onclick="if(confirm(\"Are you sure?\"))return true; else return false;"
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;
    }
} 

استخدم هذا الكود لـ jsf 1.1.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top