2010-09-29 26 views
8

Kaydet'i tıklatarak Jquery Doğrula'yı kullanarak jQuery UI iletişimini doğrulamakta sorun yaşıyorum.jQuery UI İletişim + Doğrulama

Jquery iletişim kutusu oluşturmak için kodum İşte. Bu bir hedeften a href URL iletişim yükler:

$(document).ready(dialogForms); 

function dialogForms() { 
    $('a.dialog-form').click(function() { 
    var a = $(this); 
    $.get(a.attr('href'),function(resp){ 
     var dialog = $('<div>').attr('id','formDialog').html($(resp).find('form:first').parent('div').html()); 
     $('body').append(dialog); 
     dialog.find(':submit').hide(); 
     dialog.find('#return').hide(); 
     dialog.dialog({ 
     title: a.attr('title') ? a.attr('title') : '', 
     modal: true, 
     buttons: { 
      'Save': function() {submitFormWithAjax($(this).find('form'));}, 
      'Cancel': function() {$(this).dialog('close');} 
     }, 
     close: function() {$(this).remove();}, 
     width: 'auto' 
     }); 
    }, 'html'); 
    return false; 
    }); 
} 

function submitFormWithAjax(form) { 
    form = $(form); 
    $.ajax({ 
     beforeSend: function(data) { 
      //alert("beforesend"); 
      form.validate(); 
     }, 
     url: form.attr('action'), 
     data: form.serialize(), 
     type: (form.attr('method')), 
     dataType: 'text', 
     error: function(data) { 
      alert(data); 
      $('#result').html(data); 
     }, 
     success: function(data) { 
      //alert("success"); 
      $('#result').html(data); 
      setTimeout("reloadPage()", 500); 
     } 
    }); 
    return false; 
} 

beforeSend denir, ancak iletişim denir hangi üst sayfada bulunan validate yöntemini çağırmak için görünmüyor.

 $(document).ready(function() { 
      $("#event_form").validate({ 
       rules: { 
        Name: { 
         required: true 
        }, 
        Category: { 
         required: true 
        } 
       }, 
       messages: { 
        Name: "Please enter an event name", 
        Category: "Please choose a category" 
       }, 
       submitHandler: function(form) { 
        alert("validated"); 
        //     $('#loading_1').show(); 
        //     $('#proceed_c').hide(); 
        //     $(form).ajaxSubmit(); 
        //     //form.submit(); 
       }, 
       errorPlacement: function(error, element) { 
        error.appendTo(element.next(".status")); 
       } 
      }); 

} 

submitFormWithAjax function içinde beforeSend, $("#event_form").validate yeri veya bunun içindeki submitHandler: function(form) sorun var mı? Herhangi bir yardım büyük takdir edilecektir.

+0

onlar geçersiz olduğunda '.error' sınıf sizin elemanlarına ilave edildiğini söyleyebilir: Ben jquery kez ekler böylece benim kalıcı form yeniden gerekiyordu modal "yaratır"? –

cevap

7

jQueryUI iletişim kutusunu başlattığınızda, DOM değiştirir, tüm iletişim kutusu sayfadaki konumunun dışına çıkarılır ve </body> etiketinden hemen önce eklenir. Bunu Firebug ile görebilirsiniz. Bu, Validate için bir soruna neden olur, çünkü şimdi form boştur. Bunu çözmek için, diyalogun açık etkinliğinde, forma ekleyiniz.

<form id='event_form'> 
    <div id="dialog" title="DialogTitle"> 
    </div> 
</form> 
+0

Bunu denedim ve çalışmıyor. Diyalog şimdi görünmüyor. Sadece açıklamak gerekirse, jquery iletişimini çağıran ve dialogForms() (arama sayfası) işlevini tutan sayfa herhangi bir form öğesi içermez. Hedef sayfa bir event_form ve jquery doğrulama komut dosyası içerir. Bunlar onlar için doğru yerler mi? AppendTo hala event_form'u hedefliyor mu? – Dean

+1

Kullandığım yapıyı eklemek için cevabı düzenledim, iletişim kutusu div'a ve validate forma uygulanır. Diyalog tekrar forma eklenir. Tüm bunlar, jquery kodu dahil olmak üzere ayrı bir dosyadadır ve sayfamda bir onclick() olayında bir emty div içine yüklenir. –

+0

işe yarıyor! çok teşekkürler;) – frabiacca

2

Buna biraz farklı bir yaklaşım aldı: O

dialog.dialog({ 
    title: a.attr('title') ? a.attr('title') : '', 
    modal: true, 
    buttons: { 
     'Save': function() {submitFormWithAjax($(this).find('form'));}, 
     'Cancel': function() {$(this).dialog('close');} 
    }, 
    close: function() {$(this).remove();}, 
    open: function(){ 
     $(this).parent().appendTo($('#event_form')); 
    }, 
    width: 'auto' 
    }); 

Düzenleme :) çalışır beni gerçekten kaçık geliyor, ama güven.

$("#mdl_Subject").dialog({ 
    autoOpen: false, 
    show: "drop", 
    hide: "drop", 
    modal: true, 
    create: function() { 
     $(this).parent().appendTo($('#aspnetForm')); 
    } 
}); 
+0

Burada önerildiği gibi appendTo seçeneğini kullanmak için aynı modal düzeltme gönderildi: http://bugs.jqueryui.com/ticket/9095. Ben sadece yeni jquery ui sürümleri (> = 1.10.2) etkilendiğini düşünüyorum. – wtjones

İlgili konular