2010-08-11 23 views
14

Kullanıcıların bir müşteri adı yazmasına izin vermek için bir form için Otomatik Tamamlama UI widget'ını kullanıyorum. Buradaki fikir, mevcut bir müşteriyi seçebilmeleri ve formdaki diğer alanları doldurabilmeleri ya da oluşturulacak yeni bir müşteriyi serbest bırakabilmeleridir. Bir kullanıcı mevcut bir müşteriyi seçtiğinde, o müşteriyle ilişkili kimliği saklamak için gizli bir girişi doldurmak için select olayını kullanırım.JQuery UI otomatik tamamlama değişikliği olayı - sıfırlama seçimi kimliği

Kullanmakta olduğum sorun, bir kullanıcının önce listeden bir müşteri seçmesi, ancak metne devam etmesi ve düzenlenmesi, yani yeni bir müşteri oluşturması durumunda, bu gizli giriş kimliği değerinin temizlenebilmesi gerektiğidir. .

Ben this SO question sevk ve aşağıdaki kodu oluşturuldu:

$(function() { 
      $("#customerName").autocomplete({ 
       source: "/Customers/CustomerListJSON", 
       minLength: 2, 
       select: function(event, ui) { 
        $("#customerId").val(ui.item ? ui.item.Id : ""); 
       }, 
       change: function(event, ui) { 
        try { 
         $("#trace").append(document.createTextNode(event.originalEvent.type + ", ")); 
         if (event.originalEvent.type != "menuselected") 
          $("#customerId").val(""); 
        } catch (err) { 
         $("#customerId").val(""); 
        } 
       } 
      }); 
     }); 

sorun değiştirme olayı gibi bir kullanıcı bir müşteri seçerse, gizli giriş değeri doldurulur, böylece blur ateş, ancak olmasıdır Giriş kutusundan odaklanıncaya kadar hemen temizlenir. Ancak, olayını event.originalEvent.type testinden hariç tutarsam, bir kullanıcının önceden seçilmiş bir değeri düzenlediği orijinal senaryoda gizli alanın değeri hiçbir zaman sıfırlanmaz.

Herkes önce bu mücadele vardı ve Has bunun doldurulur yüzden bu gizli girişin değerini nasıl yönetebileceğiniz hakkında bazı bilgiler sunabilir eğer öyleyse sadece bir öğe listesinden seçilen ve diğer değerle temizlenir zaman?

cevap

29

Bunu oldukça hızlı bir şekilde kendi başıma çözdüğüm anlaşılıyor. JQuery UI wiki değinen change olay ui madde select durumunda aynı biridir, bu yüzden böyle okumak için kodumu değiştirebilirsiniz:

$(function() { 
    $("#customerName").autocomplete({ 
     source: "/Customers/CustomerListJSON", 
     minLength: 2, 
     select: function(event, ui) { 
      $("#customerOrganizationId").val(ui.item ? ui.item.Id : ""); 
     }, 
     change: function(event, ui) { 
      $("#customerOrganizationId").val(ui.item ? ui.item.Id : ""); 
     } 
    }); 
}); 

etkinlik için test etmeye gerek sadece için, var ui bağımsız değişkeninde bir öğe olup olmadığı. select olayındaki kimlik ayarı büyük olasılıkla gereksizdir, ancak güvende olmak için ikisini de tutacağım.

+0

Cool! Aynı ihtiyaca sahibim ama şimdi birden fazla otomatik tamamlamaya ihtiyacım var, örneğin 'customer1' i seçtiğimde kimliğinin gizli alana ayarlanıp şimdi abcd yazıp otomatik tamamlamayı tetikledim ve ben de "customer2" yi seçiyorum. id iddialı olmalı, eğer 'customer2' çıkarırsam sadece onun kimliği gizli listeden kaldırılmalı, herhangi bir hızlı düşünce var mı? –

+0

Etiketleme araçları gibi bir şey aradığınız gibi görünüyor. Otomatik tamamlama aracı bunu yapacak, ama hoş değil. Bunun gibi bir şeyi tercih ediyorum: http://webspirited.com/tagit/#demos. Orada bunun gibi birkaç kontrol var ... Tagit geçmişte başarı ile kullandığım bir tanesi. –

+0

Bu yardımcı olur ama içerik de olmalı, bu yüzden tetikleme dizgisini kullanırsam, aksi halde otomatik tamamlamayı tetiklemelidir –

0
$(function() { 
$("#customerName").autocomplete({ 
    source: "/Customers/CustomerListJSON", 
    minLength: 2, 
    select: function(event, ui) { 
     $("#customerId").val(ui.item ? ui.item.Id : ""); 
    }, 
    change: function(event, ui) { 
     try { 
      $("#trace").append(document.createTextNode(event.originalEvent.type + ", ")); 
      if (event.originalEvent.type != "menuselected") 
       $("#customerId").val(""); 
     } catch (err) { 
      $("#customerId").val(""); 
     } 
    } 
}); 
}); 
İlgili konular