2012-10-16 13 views
10

Uygulamam için tasarlanmış ajax çağrıları oluşturmak için bir jquery eklentisi yazıyorum. Bu eklenti İçindejQuery, .html() veya .val() kullanmam gerekip gerekmediğini otomatik olarak algılar

, benim ajax çağrısı bu (Hangi soru ihtiyacı düşürüldü) gibi görünür:

$.ajax({ 
     url: route, 
     type: "post", 
     data: inputData, 
     success: function(response, textStatus, jqXHR) { 
      if (outputSelector !== undefined) { 

       $(outputSelector).html(response); 
       // or 
       $(outputSelector).val(response); 

      } 
     } 
    }); 

outputSelector eklenti dışında tanımlanmış bir seçici vardır. Bu seçicinin veya <input> veya hatta <select> olduğunu bilmiyorum. Val() veya html() kullanmam gerekip gerekmediğini bilmenin akıllı bir yolu var mı? eleman value özelliği varsa

+2

Can senin seçici, keyfi bir örnektir "div, input, select" '? –

+0

evet, aldığınız yanıtın yapısı olan –

+0

olabilir mi? bize bir örnek verebilir misin? – svillamayor

cevap

12

Muhtemelen biz kontrol edebilir: Yani

var el = $(outputSelector); 
if (el[0].value !== undefined) { 
    el.val(response); 
} else { 
    el.html(response); 
} 

, biraz bir çizgi gibi evrensel bir çözüm olabilir:

$(outputSelector).each(function() { 
    this[this.value !== undefined ? "value" : "innerHTML"] = response; 
}); 
+0

bu çözümün bakımı daha kolay olacak, daha sonra anahtar statüleri ya da '.is()' seçiciler yol boyunca potansiyel olarak güncellenecektir. Dikkat edilmesi gereken tek şey, eğer Álvaro'nun yorumlarda ('' div, input, select '') bahsettiği bir seçiciye sahip olmanız halinde, virgül üzerinde .split()' e ihtiyacınız olabilir ve her elemanı tek tek kontrol edin. – kmfk

+0

Yolunuz gayet iyi çalışıyor, [jsfiddle] (http://jsfiddle.net/HCCsD/). Teşekkür ederim. Bir. $ .each() 'da çoklu seçimleri halledebileceğim. –

+1

@Ninsuo Birçok çıkış elemanında, $ (outputSelector) .each (function() {if (this.value! == undefined) {...}}); ', [xdazz] (http://stackoverflow.com/a/12919512/1249581) önerildi. – VisioN

2

belirlemek için .is(..) yöntemi kullanabilirsiniz hangi yöntemi kullanmak. Başarınızı Fonksiyonun içerisinde

$.ajax({ 
    url: route, 
    type: "post", 
    data: inputData, 
    success: function(response, textStatus, jqXHR) { 
     if (outputSelector !== undefined) { 
      var $output = $(outputSelector), 
       method = $output.is('input,select,textarea') ? 'val' : 'html'; 

      $output[method](response); 
     } 
    } 
}); 
0

, koyun:

if (outputSelector !== undefined) { 
    if(outputSelector.is("input")) 
    { 
     outputSelector.val(response); 
    } 
    else if (outputSelector.is("div")) 
    { 
     outputSelector.html(response); 
    } 
} 

bir switch deyimi kullanmak daha iyi sözdizimi olurdu ama sadece giriş val() için kullanılacak varsayalım ve her şey daha sonra html() ise Sadece son else if'u sadece else ile değiştirin ve koşulu kaldırın.

4

outputSelector, bir sınıf seçicisiyse ve öğeler karma türdeyse, .each'u kullanmanız gerekir. div ve input'u aynı sınıfla karıştırmak iyi olmamasına rağmen, bir eklenti oluşturuyorsanız, bu durumu dikkate almanız gerekir.

$(outputSelector).each(function() { 
    if ('value' in this) { 
     $(this).val(response); 
    } else { 
     $(this).html(response); 
    } 
}); 
1

Ayrıca bir özellik, belirli bir seçicinin için tanımlanan olup olmadığını belirlemek için .prop() yöntemi kullanabilirsiniz: alternatif

if ($(outputSelector).prop("value") !== undefined) 
    $(outputSelector).val(response); 
else 
    $(outputSelector).html(response); 

EXAMPLE

yapabildin bize .hasOwnProperty()

İlgili konular