2011-08-24 113 views
27

html5支持input[type=text]元素的佔位符屬性,但我需要處理不符合標準的瀏覽器。我知道有一千個插件用於佔位符,但我想創建1001st。jquery:獲取自定義屬性的值

我能夠得到input[placeholder]元素的句柄,但試圖獲取佔位符屬性的值返回undefined - $("input[placeholder]").attr("placeholder")

我正在使用jquery 1.6.2。

這裏是jsfiddle。我修改了代碼以便在兼容html5的瀏覽器中工作,僅用於測試目的。

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")); 
      } 
     }); 
    } 
}); 

感謝您的任何和所有幫助, 乙

回答

38

你需要某種形式的迭代這裏,爲val(當與函數調用除)只適用於第一個元素:

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

應該是:

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

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

豈不'$(「輸入[佔位符] 「).val(function(){return $(this).attr(」placeholder「); });「更好? –

+0

謝謝丹尼斯。當我設置每個斷點時,我發現它甚至沒有進入函數,就像它沒有找到與該選擇符相匹配的任何元素。但是,當我把手錶放在$(「input [placeholder]」)。val()我看到「」,如果我給元素一個初始值,我會看到這個值。 – bflemi3

+0

@Richard是的,那會好一點。可能不會有太多差異。 bflemi3,你在用什麼瀏覽器?您的代碼在Chrome和IE7中工作 – Dennis

1

您還可以通過傳遞函數onclick事件做

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

<script type="text/javascript"> 

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

</script>