2010-04-09 15 views
16

"Nesne bu özelliği veya yöntemi desteklemiyor" in indexOf sonuçları:jquery bölünmüş() ve aşağıdaki kodu var

var selected = $('#hiddenField').val().split(","); 
... 
if (selected.indexOf(id) > 0) { 
    ... set value ... 
} 

Dinamik bir CheckBoxList oluşturma ve durumunu hatırlamaya çalışıyorum seçili kimlikleri gizli alana yerleştirerek onay kutularını işaretleyin.

"Nesne bu özelliği veya yöntemi desteklemiyor" ifadesini içeren bir hata alıyorum. Benim varsayımın, indexOf'u desteklemesi gereken bir dizidir. Bu yanlış mı?

+1

Bir ipucu gibi, bunlar normal ** Javascript ** yöntemleridir, jQuery özgü değildirler. –

+0

Daha fazla kod gönderirseniz muhtemelen yardımcı olur. Ayrıca, * düşündüğünüz şeyin * bu gizli alandan çıktığınız şeyin gerçekte ne olduğunu doğrulamalısınız. – Pointy

+0

@Felix: Yerleşik split ve jquery split arasında bir fark olup olmadığından emin değildim. – chris

cevap

21

Hata iletinize dayanarak, bunun Internet Explorer'dan geldiğini varsayıyorum.

Sürpriz! Internet Explorer (sürüm 8 dahil) diziler için indexOf'u desteklemez. ,

if (!Array.prototype.indexOf) 
{ 
    Array.prototype.indexOf = function(elt /*, from*/) 
    { 
    var len = this.length >>> 0; 

    var from = Number(arguments[1]) || 0; 
    from = (from < 0) 
     ? Math.ceil(from) 
     : Math.floor(from); 
    if (from < 0) 
     from += len; 

    for (; from < len; from++) 
    { 
     if (from in this && 
      this[from] === elt) 
     return from; 
    } 
    return -1; 
    }; 
} 
+1

@Matt: Teşekkürler. IE8'de uygulamaya koyduklarını düşündüm, o yüzden gittim ve hızlı bir deney yaptım ve IE7'de de görmek hoş bir sürpriz oldu. Tahmin edebileceğiniz gibi, deney kusurluydu (Prototip referansını kaldırmayı unutmuşumdur, bu eksiklik varsa bunu ekler). Tekrar teşekkürler. –

0
[].indexOf || (Array.prototype.indexOf = function(v,n){ 
    n = (n==null)?0:n; var m = this.length; 
    for(var i = n; i < m; i++) 
    if(this[i] == v) 
     return i; 
    return -1; 
}); 
22

indexOf() eksikliğini aşmak için bir jQuery yöntemi var bunun yerine .inArray() kullanabilirsiniz:

var selected = $('#hiddenField').val().split(","); 
if ($.inArray(id, selected) > -1) { 
    ... set value ... 
} 

jQuery.inArray() sadece bunun için var Burada

kullanabilirsiniz Firefox's implementation olduğunu Nedeni ... Eğer zaten jQuery dahil iseniz, fonksiyonu tekrar yazmaya gerek yok. Not: Bu aslında indexOf() gibi bir sayı döndürür.

+0

+1 en mantıklı yanıtı gibi görünüyor :) –

+0

Bu işe yarayacak gibi görünüyor, neden olmasın: >? line.id >? seçildi {...} [0]: "101" uzunluğu: 1 >? $ .inArray (line.id, seçili) -1 > – chris

İlgili konular