2010-10-14 45 views
47

Tôi đang cố gắng viết một trình cắm thêm giữ chỗ jQuery đơn giản cho một trang web của tôi nhưng tất nhiên tôi chỉ muốn kích hoạt chức năng nếu thuộc tính giữ chỗ gốc không được hỗ trợ…Cách kiểm tra xem trình duyệt có hỗ trợ thuộc tính giữ chỗ gốc không?

Làm cách nào tôi có thể sử dụng jQuery để kiểm tra cho hỗ trợ gốc của thuộc tính trình giữ chỗ?

+0

Cảm ơn bạn đã liên kết. Tài nguyên tuyệt vời. – Jannis

+2

Liên kết được cung cấp bởi @hellvinz thật đáng buồn là 410 đã biến mất. Đây là một bản sao được cập nhật: http://diveinto.html5doctor.com/detect.html#input-placeholder – Binarytales

Trả lời

93

Bạn có thể thêm vào $.support khá dễ dàng bằng cách chèn này ở phía trên cùng của javascript bạn đã viết:

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

Sau đó bạn có thể sử dụng một trong hai $.support.placeholder hoặc jQuery.support.placeholder bất cứ nơi nào trong mã của bạn.

NB Mã này được điều chỉnh từ diveintohtml5, liên kết được cung cấp bởi hellvinz ở trên.

+0

Điều này thật tuyệt vời và chính xác những gì tôi đang tìm kiếm. Cảm ơn bạn. PS: Cảm ơn bạn đã liên kết, tài nguyên tuyệt vời. * Bookmarked! * – Jannis

+0

Cảm ơn hellvinz, không phải tôi, vì liên kết! Hơn nữa, nó sẽ là tầm thường để tạo ra một plugin mà nhập khẩu tất cả các bài kiểm tra Modernizr để '$. Support'. Một bài kiểm tra nhanh cho thấy rằng nó sẽ là một tập tin 11kb khi đã được rút gọn. – lonesomeday

+0

ngay cả khi tất cả những gì tôi muốn thử nghiệm là chức năng biểu mẫu? – Jannis

15

Sử dụng các thư viện Modernizr, mà bạn có thể tìm thấy ở đây: http://www.modernizr.com/

Và sau đó làm điều này:

if (Modernizr.input.placeholder) { 
    // your placeholder text should already be visible! 
} else { 
    // no placeholder support :(
    // fall back to a scripted solution 
} 

Modernizr thực sự tiện dụng để thử nghiệm hỗ trợ của trình duyệt cho hầu hết các chức năng HTML5.

+0

Cảm ơn câu trả lời của bạn. Tôi đã sử dụng Modernizr trong tài liệu của tôi tuy nhiên cho plugin này để làm việc trên tất cả các trang web tôi không muốn dựa vào bất kỳ thư viện bên ngoài như Modernizr khác hơn jQuery tất nhiên. Trên trang hiện tại của tôi rằng tôi đang xây dựng này thực sự hoạt động tuyệt vời, nhưng chỉ cho khả năng tương thích chung tôi muốn một cái gì đó không phụ thuộc vào Modernizr. – Jannis

3

Thuộc tính placeholder tồn tại trên các đối tượng DOM INPUT trong tất cả các trình duyệt bất kể thuộc tính giữ chỗ đã được xác định trên phần tử HTML INPUT hay chưa.

Cách đúng là:

var Modernizr = {}; 
// Create the input element for various Web Forms feature tests. 
var inputElem = document.createElement('input'), attrs = {};  
Modernizr.input = (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(' ')); 

if(!Modernizr.input.placeholder) { 
    // Do something. 
} 
4

Tôi thích có một lớp đơn giản như vậy ...

var Browser = { 
    Can: { 
    Placeholder: function() { 
     return 'placeholder' in document.createElement('input'); 
    } 
    } 
} 

... để bạn có thể dễ dàng kiểm tra nếu trình duyệt của bạn hỗ trợ các thuộc tính placeholder.

if (Browser.Can.Placeholder()) { 

} 
+2

Không đủ jQuery. – twistedpixel

+0

@twistedpixel - Đó là một trò đùa, phải không? – WoIIe

+4

@Wolle $ ('# yourComment') sau ('Có') – twistedpixel

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