javascript - style - क्या आप जावास्क्रिप्ट कॉलबैक की प्रतीक्षा कर सकते हैं?




स्क्रिप्टिंग भाषा (6)

आपने जावास्क्रिप्ट में सिर्फ एक बड़ी सीमा मारा है एक बार आपका कोड अतुल्यकालिक दुनिया में प्रवेश करता है, क्लासिक प्रक्रियात्मक निष्पादन प्रवाह पर वापस जाने का कोई रास्ता नहीं है।

आपके उदाहरण में, समाधान से भरा होने की प्रतिक्रिया के लिए एक लूप इंतजार करना होगा। समस्या यह है कि जावास्क्रिप्ट कोई निर्देश नहीं प्रदान करता है जो आपको प्रसंस्करण शक्ति का 100% बिना बिना अनिश्चित काल के लूप की अनुमति देगा। इसलिए आप ब्राउज़र को अवरुद्ध कर देंगे, कभी-कभी उस बिंदु तक जहां आपका उपयोगकर्ता वास्तविक प्रश्न का उत्तर नहीं दे पाएगा।

इसका एकमात्र समाधान अतुल्यकालिक मॉडल से चिपकना और उसे रखना है। मेरी सलाह यह है कि आपको किसी भी फ़ंक्शन को कॉलबैक जोड़ना चाहिए, जिसे कुछ अतुल्यकालिक कार्य करना चाहिए, ताकि कॉलर आपके फ़ंक्शन के अंत में कुछ निष्पादित कर सकें।

function confirm(fnCallback) 
{
    jConfirm('are you sure?', 'Confirmation Dialog', function(r) 
    {
        // Do something with r 

        fnCallback && fnCallback(r); // call the callback if provided
    });
}

// in the caller

alert('begin');

confirm(function(r)
{
    alert(r);

    alert('end');
})

मैं डिफ़ॉल्ट अलर्ट (जो मेरी राय में बहुत भयानक लग रही है) के बजाय http://abeautifulsite.net/notebook/87 से jQuery अलर्ट संवाद लायब्रेरी का उपयोग करने की कोशिश कर रहा हूं। यह एक महान पुस्तकालय प्रतीत हो रहा है, लेकिन jConfirm लाइब्रेरी का उपयोग करने का एक उदाहरण नहीं है।

मुझे ऐसा कुछ करने की आवश्यकता है:

function confirm() {
        var result = false;
        var response = false;
        jConfirm('are you sure?', 'Confirmation Dialog',
          function(r) {
            result = r;
            response = true;
            return r;
        });
        if (response == true) {
            alert(result);
            return result;
        }
        else {
            //wait for response
            alert('hi');
        }
    }

और मेरे। नेट बटन से मेरा कॉल:

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

बाकी जावास्क्रिप्ट के निष्पादित होने से पहले परिणाम प्राप्त करने के लिए कॉलबैक का सही उपयोग करने के बारे में कोई भी विचार?

धन्यवाद।


मुझे लगता है कि आपको इस तरह की प्रतिक्रिया को प्राप्त करना होगा। मुझे नहीं लगता कि आपको कॉलबैक चाहिए।

function confirm() {
        var response = jConfirm('are you sure?', 'Confirmation Dialog');
        if (response) {
            alert(result);
        }
        else {
            //wait for response
            alert('hi');
        }
    }

मुझे लगता है कि मैं इस समस्या का एक संभावित समाधान के साथ आया हूं। मैं इस लेख को पढ़ रहा था: http://treasure4developer.wordpress.com/2008/06/23/calling-postback-event-from-javascript/

असल में यह विचार यह है कि आप जावास्क्रिप्ट से पोस्टबैक को मजबूर करते हैं, सबसे पहले मुझे पता चला कि पोस्टबैक काम करेगा लेकिन मेरे बटन ईवेंट को कॉल नहीं करेगा, लेकिन लेख पढ़ने के बाद मुझे पता चला कि मुझे पता चल गया था कि क्या यह जावास्क्रिप्ट पोस्टबैक था और बस कॉल करें प्रसंस्करण करने के लिए विधि

सादर DotnetShadow


कैसे दोस्तों ने कहा, कोई रास्ता नहीं है! लेकिन ... हम अपने देश (ब्राजील) में कहने के लिए कैसे उपयोग करते हैं, ले गैम्बी:

हम ऐसा कुछ कर सकते हैं:

<h:commandLink styleClass="linkValor xExcluir" value="x"  
                     onclick="if(confirmar('Confirmar excluir.','Deseja realmente excluir este registro?', this)) return true; else return false;"
                     action="#{mBeanPesquisarLinhas.excluir}"/>

और जावास्क्रिप्ट:

function confirmar(titulo, msg, elemento) { 

    if ($(elemento).attr('sim')) {      
        $(elemento).removeAttr('sim');      
        return true;
    } else if ($(elemento).attr('nao')) {       
        $(elemento).removeAttr('nao');      
        return false;
    } else {
        $("#dialog-confirm").html('<p>' + msg + '</p>').dialog({
            resizable : false,
            height : 200,
            modal : true,
            title : titulo,
            buttons : {
                "Sim" : function() {
                    $(this).dialog("close");
                    $(elemento).attr('sim', 'sim');
                    $(elemento).click();
                },
                "Não" : function() {
                    $(this).dialog("close");
                    $(elemento).attr('nao', 'nao');
                    $(elemento).click();
                }
            }
        });
    }

    return false;
}

यह एक ही समस्या है, लेकिन jquery-ui का उपयोग कर।

अलविदा और मुझे आशा है कि यह किसी की मदद कर सकता है


कॉलबैक के बारे में संदेश भेजने के बारे में सोचें और यह आपके कोड में बेहतर संरचना का परिणाम देगा।


यह काम करता है JQuery की आवश्यकता है

function myconfirm(kyssa, elm, e){ // neG
    if(jQuery('#confirmquestion').data('result')){
        var V = jQuery('#confirmquestion').data('result');
        jQuery('#confirmquestion').remove(); 
        return V == 'Y' ? true : false;         
    }else if(!jQuery('#confirmquestion').length){
        jQuery('body').append('<div id="confirmquestion">'+
        '<h4>Kinnitus</h4>'+
        '<div id="kyssa">'+kyssa+'</div>'+
        '<center>'+
        '<button onclick="jQuery(\'#confirmquestion\').data(\'result\', \'Y\');">Jah</button>&nbsp;'+
        '<button onclick="jQuery(\'#confirmquestion\').data(\'result\', \'N\');">Ei</button></div>'+
        '</center>');
        jQuery('#confirmquestion button').click(function(){
            jQuery(elm).trigger(e.type);
        })
    }       
    return false;
}

onChange="if(myconfirm(\'Saada kiri: \'+jQuery(this).find(\'option:selected\').html()+\' ?\', this, event)) { ... }"

सीएसएस

#confirmquestion{
    border:1px solid #999;
    background:white;
    padding-bottom: 30px;
    position:fixed;
    width:300px;
    font-size:12px;
    top:45%;
    left:50%;
    margin-left:-150px;
}

#confirmquestion h4 {
    background:blue;
    color:white;
    margin:0;
    padding: 2px 5px;
    border-bottom:#777; 
    text-align:center;
}

#confirmquestion #kyssa {
    padding: 30px 25px;
}





confirm