2011-04-04 3 views
15

tldr: Neden ('inputElemnt içindeki yer tutucu'), yer tutucu özniteliği için yerel desteğe rağmen IE8'de eşittir? Yerel desteği kontrol etmenin iyi bir yolu (öğedeki özellik) değil mi? Javascript kütüphanesi Modernizer kullanmaktadır.Javascript IE8'de yerel yer tutucu desteğini denetle

Uzun: Ben defaultValue (http://unwrongest.com/projects/defaultvalue/) adı verilen küçük jQuery eklentisi var. Yer Tutucu (https://github.com/janjarfalk/jquery.placeholder.js) adlı küçük bir JQuery eklentisi var. Temel olarak HTML5 yer tutucu özelliği için bir geri dönüş.

Son güncellenen bir kodda bu üç kod satırını ekledim. Tarayıcı, yer tutucu özniteliğine yerel destek sağlamışsa Defaultvalue'nın çalışmadığını umuyordu.

 
if('placeholder' in this){ 
    // this is an input-element 
    return false; 
} 

IE8 ve IE7 dışındaki çoğu tarayıcıda çalışıyor gibi görünüyor. Bazı nedenlerden dolayı, buradaki 'yer tutucu' anahtarını bulur, ancak IE7/IE8'deki yer tutucu özniteliği için herhangi bir destek olmadığını düşünüyorum.

Kodum, Javascript kitaplığı Modernizer'da (http://www.modernizr.com/) bu koddan ilham aldı.

 
(function(props) { 
    for (var i = 0, len = props.length; i < len; i++) { 
     attrs[ props[i] ] = !!(props[i] in inputElem); 
    } 
    return attrs; 
})('autocomplete autofocus list placeholder max min multiple pattern required step'.split(' ')); 

Neyi eksik?

+3

IE özellikleri ve özellikleri hakkında clueless olduğuna göre, (jQuery yaptığı gibi) ikisi de aynı şeydir düşünüyor. Standart olmayan özellikler "expando" özellikler olarak eklenir. Ev sahibi nesnelerin özellikleri üzerinde yinelemek için kullanmak iyi bir fikir değildir. IE <9 hasAttribute'u desteklemiyor, bu da işe yaramıyor. – RobG

+0

Teşekkürler! Yorumunuz çalışan bir çözüm yol açtı. – janjarfalk

+1

Yer tutucu özniteliği IE9'da uygulanmaz ... –

cevap

14

Yeni bir ham girdi öğesi oluşturmak sorunumu çözdü.

Teşekkür RobG

 
var nativePlaceholderSupport = (function(){ 
    var i = document.createElement('input'); 
    return ('placeholder' in i); 
})(); 

if(nativePlaceholderSupport){ 
    return false; 
} 
 
var nativePlaceholderSupport = (function() { 
    var i = document.createElement('input'); 
    return i.placeholder !== undefined; 
})(); 

if(nativePlaceholderSupport){ 
    return false; 
} 

, ona götürdü.

+0

Bu iyi bir çözüm değildir. HTML5 ** taslak ** diyor ki: "Belirtildiği takdirde, öznitelik ...", bu yüzden zorunlu bir özellik değildir ve eğer bir özellik, eğer bir özellik, eğer bir özellik, bir ayarlayın. Bu nedenle, yokluğu, desteklenmediğine dair bir işaret değildir, sadece ayarlanmamıştır. Ve ev sahibi nesneler için kullanmayın, ne yapmaya çalışıyorsanız yapın, muhtemelen daha geniş bir tarayıcı seçimi ile desteklenen başka bir şekilde çözülebilir. – RobG

+0

@RobG Kullanmakta değil ... in. –

+0

@ Šime Vidas: Tamam, eğer ... her neyse. Bu, belirli bir sırayla döndürülen yerel nesne özellikleri hakkındaki tartışmalara benzemektedir, çünkü ECMA-262, buna güvenmemekle birlikte, bazı tarayıcılar bu şekilde gözükmektedir. Bir spesifikasyonda bir şey tanımlanmışsa, zaman içinde tarayıcıların bu davranış üzerinde yakınlaşmasını ve istisnalarla ilgilenmesini bekleyebilirsiniz. Bir davranış yaygın olsa da belirtilmemişse, sadece herkesin lideri takip etmesini umuyorsunuz. Belki yapacaklar, belki de yapmazlar. Hepsi nesne mülkiyet sırasına göre IE'yi takip etmiyorlar, o zaman neden DOM öznitelikleri/özellikleri üzerinde Gecko/WebKit'i takip etmelisiniz? – RobG

1

Yapmıyor. Hem IE9 hem de IE8'de yanlıştır.

Canlı tanıtım: http://jsfiddle.net/JVSgx/

+2

IE 9, yer tutucu özniteliğini destekliyor mu? Bildiğim kadarıyla değil. – RobG

+0

@RobG No. Demom, bunu doğruladı. –