2010-08-20 33 views
7

Giả sử tôi đang sử dụng plugin jQuery "trình giữ chỗ" đọc thuộc tính "trình giữ chỗ" từ các yếu tố đầu vào và mô phỏng nó cho các trình duyệt chưa hỗ trợ trình giữ chỗ.Tôi có thể ghi đè jQuery .val() cho chỉ một số yếu tố đầu vào không?

Nhưng tôi vẫn muốn $ ("đầu vào"). Val() để hoạt động đúng - nghĩa là trả về "" nếu văn bản trong hộp văn bản là văn bản giữ chỗ. Có anyway tôi có thể ghi đè .val() chỉ cho những đầu vào?

Trả lời

6

thử điều này:

jQuery.fn.rVal=function() { 
    if(this[0]) { 
     var ele=$(this[0]); 
     if(ele.attr('placeholder')!=''&&ele.val()==ele.attr('placeholder')) { 
      return ''; 
     } else { 
      return ele.val(); 
     } 
    } 
    return undefined; 
}; 

và chỉ đơn giản là sử dụng $ ("# ele_id") rVal() để lấy giá trị.. Hoặc nếu bạn muốn thay thế hàm val (và sử dụng nó như bình thường):

jQuery.fn.rVal=jQuery.fn.val; 
jQuery.fn.val=function(value) { 
    if(value!=undefined) { 
     return this.rVal(value); 
    } 
    if(this[0]) { 
     var ele=$(this[0]); 
     if(ele.attr('placeholder')!=''&&ele.rVal()==ele.attr('placeholder')) { 
      return ''; 
     } else { 
      return ele.rVal(); 
     } 
    } 
    return undefined; 
}; 
+0

đây là con đường để đi. – Ender

+0

Nhưng điều gì sẽ xảy ra nếu người dùng thực sự nhập một giá trị giống như trình giữ chỗ? – RobG

2

Bạn có thể ghi đè phương thức val() trên toàn cầu, sau đó kiểm tra xem đó có phải là đầu vào bình thường hay không.

0

Bạn có thể sử dụng plugin watermark không?

http://code.google.com/p/jquery-watermark/

Nó khá dễ sử dụng, chỉ cần gọi $("input").watermark("Placeholder text") và nó sẽ hoạt động theo cách bạn mô tả

Các vấn đề liên quan