2011-08-24 9 views
27

html5 obsługuje atrybut zastępczy elementów input[type=text], ale muszę obsługiwać niezgodne przeglądarki. Wiem, że istnieje tysiąc wtyczek dla elementu zastępczego, ale chciałbym stworzyć 1001..jquery: uzyskaj wartość niestandardowego atrybutu

Jestem w stanie uzyskać uchwyt elementu input[placeholder], ale próba uzyskania wartości zastępczego atrybutu powraca niezdefiniowana - $("input[placeholder]").attr("placeholder").

Używam jquery 1.6.2.

Oto jsfiddle. Zmodyfikowałem kod tak, aby działał w przeglądarce, która jest zgodna z html5 tylko do celów testowych.

html

<input type="text" name="email" size="10" placeholder="EMAIL ADDRESS"> 

jquery

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

$(document).ready(function(){ 
    if(!SupportsInputPlaceholder()) { 
     //set initial value to placeholder attribute 
     $("input[placeholder]").val($("input[placeholder]").attr("placeholder")); 

     //create event handlers for focus and blur 
     $("input[placeholder]").focus(function() { 
      if($(this).val() == $(this).attr("placeholder")) { 
       $(this).val(""); 
      } 
     }).blur(function() { 
      if($(this).val() == "") { 
       $(this).val($(this).attr("placeholder")); 
      } 
     }); 
    } 
}); 

Dzięki za wszelkie pomoc, B

Odpowiedz

38

trzeba jakąś formę iteracji tutaj, jak val (z wyjątkiem, gdy wywołana z funkcją) działa tylko na pierwszym elemencie:

$("input[placeholder]").val($("input[placeholder]").attr("placeholder")); 

powinno być:

$("input[placeholder]").each(function() { 
    $(this).val($(this).attr("placeholder")); 
}); 

lub

$("input[placeholder]").val(function() { 
    return $(this).attr("placeholder"); 
}); 
+2

nie '$ (" input [zastępczy] ") .val (function() {return $ (this) .attr (" placeholder "); }); 'być lepszy? –

+0

Dzięki Dennis. kiedy ustawiam punkt przerwania na każdym, stwierdzam, że nie wchodzi on nawet do funkcji, tak jak nie znajduje żadnych elementów pasujących do tego selektora. Ale kiedy kładę zegarek na $ ("input [placeholder]". Val() Widzę "" i jeśli dam pierwiastkowi wartość początkową, zobaczę wartość. – bflemi3

+0

@Richard Tak, to trochę lepiej. Prawdopodobnie nie za dużo myśli różnica. bflemi3, Jakiej przeglądarki używasz? Twój kod działa w Chrome i IE7 – Dennis

1

Można też to zrobić przekazując funkcję z onclick zdarzenia

<a onlick="getColor(this);" color="red"> 

<script type="text/javascript"> 

function getColor(el) 
{ 
    color = $(el).attr('color'); 
    alert(color); 
} 

</script>