2011-08-24 45 views
27

html5 hỗ trợ thuộc tính trình giữ chỗ trên các phần tử input[type=text], nhưng tôi cần xử lý các trình duyệt không tuân thủ. Tôi biết có một nghìn plugin trên đó cho trình giữ chỗ nhưng tôi muốn tạo 1001st.jquery: nhận giá trị của thuộc tính tùy chỉnh

Tôi có thể xử lý trên thành phần input[placeholder] nhưng cố gắng lấy giá trị của thuộc tính trình giữ chỗ là trả lại không xác định - $("input[placeholder]").attr("placeholder").

Tôi đang sử dụng jquery 1.6.2.

Đây là jsfiddle. Tôi đã sửa đổi mã để làm việc trong một trình duyệt tương thích html5 chỉ dành cho mục đích thử nghiệm.

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

Thanks cho bất kỳ và tất cả sự giúp đỡ, B

Trả lời

38

Bạn cần một số hình thức lặp ở đây, như val (trừ khi được gọi với một chức năng) chỉ hoạt động trên phần tử đầu tiên:

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

nên là:

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

hoặc

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

Sẽ không phải '$ (" đầu vào [placeholder] ") .val (function() {return $ (this) .attr (" trình giữ chỗ "); }); 'tốt hơn? –

+0

Cảm ơn Dennis. khi tôi thiết lập một điểm ngắt trên mỗi tôi thấy rằng nó thậm chí không nhập chức năng, như nó không tìm thấy bất kỳ yếu tố nào phù hợp với bộ chọn đó. Nhưng khi tôi đặt một đồng hồ trên $ ("đầu vào [placeholder]"). Val() Tôi thấy "" và nếu tôi cung cấp cho các yếu tố một giá trị ban đầu tôi sẽ thấy giá trị. – bflemi3

+0

@Richard Yeah, tốt hơn một chút. Có lẽ không quá nhiều suy nghĩ khác biệt. bflemi3, Bạn đang sử dụng trình duyệt nào? Mã của bạn hoạt động trong Chrome và IE7 – Dennis

1

Bạn cũng có thể làm điều này bằng chức năng đi qua với sự kiện onclick

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

<script type="text/javascript"> 

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

</script> 
Các vấn đề liên quan