2013-11-28 36 views
5

jquas iletişim kutusunu kullanarak javascript'in 'onayla' kutusunu çoğaltmaya çalışıyorum. Bu benim kodum,jquery ui iletişim kutusu onayla

Bu yöntemi uyarmaya çalıştığımda, 'undefined' gösterir. Pop-up görüntülenmesini beklemiyor. Kullanıcı girişi için beklemek için bu customConfirm işlevini nasıl yapabilirim (tamam/iptal et)? İhtiyacım şu ki, customConfirm() yöntemi, kullanıcı girdisine göre false doğru döndürecektir.

cevap

7

jQuery.deferred/sözünü kullanmak olduğunu customConfirm fonksiyonu üzerine diyalog açıyorlar çağırın. Bu örnekte

http://api.jquery.com/deferred.promise/

,

1 asyncEvent)/reddetme kararlılığı, senin ok için mantık/

3) bir döner iptal bir jquery ertelenmiş nesneyi

2) gelmiştir yaratır ertelenmiş bir nesnenin çözülüp çözülmediğini ya da reddedilip reddedilmediğini belirlemek için bir $ ile birlikte kullanılabilecek deferred.promise() nesnesi (tamam/iptal). Ne yapardın

ok/ayarı iptal deferred.resolve/

3) return bir ertelenmiş reddetmek ile ) bir jquery ertelenmiş nesneyi

2) iletişim başlatmak oluşturmaktır .promise() nesnesi,

4) $ .her http://api.jquery.com/jQuery.when/

ile ertelenmiş söz nesnesini kullanın yardımcı

Ayrıca sadece kararlılığını kullanabilir ve onayla $ .her yılında doğru veya yanlış olup olmadığını belirleyebilir,

function customConfirm(customMessage) { 
    var dfd = new jQuery.Deferred(); 
    $("#popUp").html(customMessage); 
    $("#popUp").dialog({ 
     resizable: false, 
     height: 240, 
     modal: true, 
     buttons: { 
      "OK": function() { 
       $(this).dialog("close"); 
       alert(true); 
       dfd.resolve(true); 
      }, 
      Cancel: function() { 
       $(this).dialog("close"); 
       alert(false); 
       dfd.resolve(false); 
      } 
     } 
    }); 
    return dfd.promise(); 
} 

$.when(customConfirm('hey')).then(
    function(confirm) { 

    if(confirm){alert("things are going well");} 
    else{alert("you fail this time");} 
}); 

Umut.

+0

Bunu ve diğer örnekleri jQuery 3.1.0 & jQuery UI 1.12.0 ile onaylama diyalogu oluşturmaya çalışın. $ .when() 'işlevini çalıştırmadan önce bir varsayılan değişken oluşturuyordu. Değişkenin '$ .when()' tamamlanmadan önce geçtiğini tespit ettik. Herhangi bir öneri veya tavsiye? – Twisty

+0

FYI - Sorunumu buldum. Anonim işlevi kullanıyordum ve içeriden sonra değişkenler çalıştırıldıktan sonra kaybolacaktı. Önceden tanımlanmış bir işleve geçmek yardımcı oldu. – Twisty

2

İletişim kutusunu belge hazır işlevi üzerine yüklemelisiniz. Yapmanız gereken şey

function customConfirm(customMessage) { 
    $("#popUp").html(customMessage); 
    $("#popUp").dialog("open"); 
    } 

    $(document).ready(function(){ 
    $("#popUp").dialog({ 
     resizable: false, 
     autoOpen: false, 
     height: 240, 
     modal: true, 
     buttons: { 
      "OK": function() { 
       $(this).dialog("close"); 
       alert(true); 
       return true; 
      }, 
      Cancel: function() { 
       $(this).dialog("close"); 
       alert(false); 
       return false; 
      } 
     } 
    }); 

    }); 
+0

içine ertelenen ve geri çağrıları modüllerini alabilirsiniz. hala customConfirm'i çağırdığımda mesajı undefined gösteriliyor –

+0

'customMessage' parametresinin herhangi bir değeri var mı? Consol.log çalışın. – Masudul

+0

Böyle denedim, uyarı (customConfirm ("customMessage")); –

7

Modül ertelenmiş ve geri çağrıları ile zepto kullandığım şey, cazibe gibi çalışır. jquery için benzer olmalı ya da sadece html o çalışmıyor

function customConfirm(customMessage) { 
    var d = new $.Deferred(); 
    $("#popUp").html(customMessage); 
    $("#popUp").dialog({ 
     resizable: false, 
     height: 300, 
     modal: true, 
     buttons: { 
      "Yes": function() { 
       $(this).dialog("close"); 
       d.resolve() 
      }, 
      "No": function() { 
       $(this).dialog("close"); 
       d.reject(); 
      } 
     } 
    }); 
return d.promise(); 
} 

customConfirm("Do you Want to delete the File?") 
.then(function(){ 
    console.log("You Clicked Yes") 
}) 
.fail(function(){ 
    console.log("You Clicked No") 
}); 
+0

Bu harika çalışıyor. Ancak, "var d = new $ .Deferred()" ifadesinden sonra noktalı virgül eksik. 'Var d = new $ .Deferred(); ' – steviethecat

+0

olması gerekir Sabit. Ama javascript yarı kolonları umursamıyor. – pyros2097

İlgili konular