2010-08-27 31 views
5

Nhiều trang có một hộp tìm kiếm cho họ thường sẽ có văn bản được phủ lớp "Tìm kiếm" bị biến mất khi tập trung vào phần tử và xuất hiện lại khi tiêu điểm bị mất. Tôi tò mò muốn biết những gì mọi người đề nghị là chiến lược tốt nhất cho việc này.Chiến lược được đề xuất cho văn bản gợi ý hộp nhập (chẳng hạn như "Tìm kiếm" được xếp chồng lên hộp tìm kiếm)?

Chiến lược tôi đã sử dụng là sử dụng các sự kiện lấy nét/làm mờ của phần tử đầu vào và kiểm tra nội dung để xác định xem giá trị có nên thay đổi hay không. Trong ví dụ sau tôi sử dụng jQuery. Lấy một ví dụ, nơi chúng tôi có một yếu tố đầu vào với một id của quick-search, khi có sản phẩm nào tôi hiển thị dòng chữ "Tìm kiếm" khi tập trung để loại bỏ các văn bản và cập nhật một phong cách,

$(function() { 
    $("#quick-search").focus(function() { 
    if (this.value === "Search") { 
     $(this).removeClass("quick-search-not-focussed"); 
     this.value = ""; 
    } 
    }).blur(function() { 
    if (this.value === "") { 
     $(this).addClass("quick-search-not-focussed"); 
     this.value = "Search"; 
    } 
    }); 
}) 

lớp quick-search-not-focussed của tôi trông như sau:

.quick-search-not-focussed { color: #bbb; } 

Điều này phù hợp với tôi khi hộp tìm kiếm chỉ thực sự được gửi khi bạn nhập, vì một số trường hợp yêu cầu nhiều yếu tố đầu vào hơn với văn bản đầu vào bị che phủ. ? Cá nhân tôi không thích sử dụng hình ảnh trong cách tiếp cận này.

+0

sẽ không bận tâm một chút phản hồi từ @Brett Ryan về chủ đề này. Bạn có cần jQuery cho các phần khác của trang tìm kiếm không? Các giải pháp có giúp ích không? –

Trả lời

4

jQuery placeholder

Trên thực tế, có rất quite a few similar plugins. Người mà tôi liên kết là đủ tốt cho tôi.

+0

và nếu phần còn lại của trang không có sử dụng cho jQuery, thì đâu là điểm để gửi tất cả nội dung bổ sung đó đến trang? –

+0

@rockinthesixstring: sau đó sử dụng giải pháp của bạn, bằng mọi cách. –

+0

không tranh cãi. Chỉ cần chỉ ra sự thật. giải pháp của bạn là một giải pháp tốt ... chỉ quá mức cần thiết nếu đó là nội dung JS duy nhất trên trang. –

1

Tôi đã sử dụng thông tin sau trong mã của mình.

<input id="searchBox" 
     class="search-gray" 
     name="q" tabindex="1" 
     onblur=" if (this.value==''){this.value = 'search...'; this.className = 'search-gray'}" 
     onfocus=" this.className = ''; if (this.value=='search...') {this.value = ''}" 
     type="text" 
     value="search..."> 

<style> 
    .search-gray{color:#c5c5c5;} 
</style> 

EDIT
Đây là những gì StackOverflow sử dụng cho hộp tìm kiếm của họ

<input name="q" 
     class="textbox" 
     tabindex="1" 
     onfocus="if (this.value=='search') this.value = ''" 
     type="text" 
     maxlength="80" 
     size="28" 
     value="search"> 
+0

đó là rất nhiều để gửi xuống đường ống cho một trường văn bản duy nhất. – tster

+0

nó là một phương pháp tương tự với phương pháp được sử dụng ở đây trên SO –

+2

Obtrusive JS = xấu. –

1

Tôi thường làm điều gì đó tương tự như sau:

<input type="text" name="email" data-original="Email address" value="Email address" /> 
<input type="text" name="username" data-original="Username" value="Username" /> 

<script type="text/javascript"> 
    $(document).ready(function(){ 
     $('input[data-original]').each(function(){ 
      var input = $(this); 
      var original = input.attr('data-original'); 

      input.focus(function(){ 
       if (input.val() == original) 
        input.addClass('focused').val(''); 
      }); 
      input.blur(function(){ 
       if (input.val() == '') 
        input.removeClass('focused').val(original); 
      }); 
     }); 
    }); 
</script> 

này cũng giống như cách tiếp cận của bạn ngoại trừ với lợi thế là bạn không phải lặp lại mã của mình cho từng trường; thay vào đó bạn chỉ có thể chỉ định data-original trên các trường của bạn và chúng sẽ tốt để thực hiện.

+0

và nếu phần còn lại của trang không có sử dụng cho jQuery, thì điểm nào trong việc gửi tất cả nội dung bổ sung đó đến trang? –

+0

Mã OP sử dụng jQuery. –

+0

Cách tiếp cận tuyệt vời, tôi thích phương pháp này vì nó khá đơn giản, tôi đã đánh dấu Mauricio Scheffer như đã trả lời vì tôi thích thực tế dựa vào thư viện :) –

1

FWIW, trình duyệt Webkit trực tiếp hỗ trợ một thuộc tính placeholder trên <input> tags:

​<input placeholder='enter something' />​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​ 
+0

có nó hoạt động cho các trình duyệt hỗ trợ webkit, nhưng những gì về trình duyệt 't? –

+0

Tôi giả sử trong trường hợp thuộc tính giữ chỗ không được hỗ trợ, người ta có thể sử dụng plugin jQuery này. - http://plugins.jquery.com/project/html5-placeholder –

+0

Đề xuất tốt, tuy nhiên tôi không và bất kỳ ai có thể nhắm mục tiêu một trình duyệt cụ thể hay không, ngoại trừ việc tôi sẽ không hỗ trợ trình duyệt cũ hơn 3 năm . –

2

Có một cái nhìn tại một này: http://fuelyourcoding.com/scripts/infield/

khác nhau của nó từ những người khác ở đây ở chỗ nó có thể sử dụng nhiều hơn một chút. Nhãn mờ dần trên tiêu điểm trường và chỉ biến mất khi bạn bắt đầu nhập.

không phô trương.

+0

Đó thực sự là một plugin khá gọn gàng, tôi thích nó. Tôi đã không thử các plugin, tuy nhiên sẽ bit khó khăn được trên các trang tải chậm nơi "sẵn sàng" đã không bắn gây ra các trang để tải với nhãn có thể nhìn thấy và sau đó "di chuyển" vào yếu tố đầu vào?Tôi chỉ giả định đây là những gì có thể xảy ra, tuy nhiên điều này có thể được giải quyết tôi giả định bằng cách thiết lập các yếu tố tầm nhìn trước và sau khi cuộc gọi. –

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