2011-06-24 48 views
9

Tôi đang cố gắng để chọn văn bản trong một hộp đầu vào chỉ đọc, sử dụng jQuery, đây là những gì tôi có:Chọn văn bản trên tập trung

$('input').focus(function(){ 
     $(this).select(); 
    }) 

Khi tôi bấm vào đầu vào tuy nhiên, nó nhanh chóng lựa chọn tất cả các văn bản, nó "nhấp nháy", sau đó nó trở lại trạng thái bình thường bị bỏ chọn.

Bất kỳ ý tưởng nào về điều này?

+0

Điều này có vẻ phù hợp với tôi mặc dù nó phụ thuộc vào nơi tôi nhấp vào. Nhấp vào cuối nội dung văn bản hoạt động tốt, nhấp vào giữa không nhấp nháy bạn mô tả lần đầu tiên và sau đó làm việc lần thứ hai. –

+0

Tôi đã thử nghiệm mã trên trong jquery 1.4.3 và nó hoạt động tốt! –

Trả lời

4

Sự cố xảy ra với thực tế là hộp nhập liệu chỉ đọc (khi bạn đề cập đến bạn trong câu hỏi).
(nó không phải là một jQuery hoặc javascript vấn đề)

IE, FF và Opera không có vấn đề. Nhưng Chrome và Safari triển lãm các vấn đề bạn đề cập đến ..

Trông giống như một thực hiện khác nhau, và tôi không chắc chắn bạn có thể làm việc xung quanh mà ..

bản demo để giới thiệu (kiểm tra trong tất cả các trình duyệt với giao diện điều khiển mở)
http://jsfiddle.net/gaby/N9qzq/3/

+0

Cảm ơn bạn .. Sẽ phải xem xét một phương pháp khác, sẽ không hoạt động trong Chrome. – dzm

0

Do mâu thuẫn mà mọi người đang nói đến, bạn có thể sử dụng CSS để mô phỏng lựa chọn của bạn? Khi đầu vào nhận được tiêu điểm, hãy áp dụng CSS colorbackground-color để có vẻ như nó được chọn.

+0

Tuyệt đối không. Vấn đề là làm cho nó thuận tiện cho người dùng sao chép/dán văn bản trong trường. –

1

Có một chút kỳ quặc xảy ra ở đây. focus xảy ra trên mousedown, nhưng vị trí con trỏ xảy ra trên click (ví dụ: mousedown theo sau là mouseup). Khi con trỏ được đặt, mọi lựa chọn sẽ biến mất.

Vì vậy, bạn sẽ rất có thể muốn giữ lại sự kiện focus của bạn (ví tabbing và trigger mục đích ing) mà còn thêm một hoặc một handler clickmouseup để làm chọn thực tế trong trường hợp của một nhấp chuột.

$('input[type="text"]').focus(function() { 
    $(this).select(); 
}).click(function() { 
    if ($(this).val() === 'Your default value') 
    { 
     $(this).select(); 
    } 
}); 

if tồn tại để khi người dùng có văn bản tùy chỉnh trong thông tin bạn nhập, họ có thể nhấp vào mà không chọn văn bản. Mặc dù, điều đó không thực sự áp dụng cho đầu vào văn bản readonly, vì vậy nó có thể được xóa một cách an toàn.

Chỉnh sửa: Mã dường như không nhất quán ở mức tốt nhất, vì vậy đây có thể không phải là giải pháp.

0

Dựa trên những gì Gaby đã viết trong bài viết của họ, giải pháp này dường như được làm việc cho tôi:

$('input').focus(function(){ 
    var _self = this; 
    setTimeout(function(){ console.log(_self.select())},100) 
    }) 
5

Một sự kết hợp của hai kỹ thuật làm việc cho tôi, mặc dù hộp của tôi đã không chỉ đọc. Lựa chọn bình thường() hoạt động ngay trong Firefox. Tuy nhiên, trong Safari, mouseup và thứ tự các sự kiện làm cho nó tự bỏ chọn nó một lần nữa trên mouseup. Tôi đính kèm một sự kiện mouseup bắt đầu một lựa chọn trên một bộ đếm thời gian trễ sau khi mouseup nên đã hoàn thành can thiệp (nếu văn bản vẫn là văn bản mặc định được thay thế).

Ví dụ:

$('#your_selector').focus(function() { 
    $(this).select(); 
}).mouseup(function() { 
    if ($(this).val() === 'Enter search terms here'){ 
    var _self = this; 
    setTimeout(function(){ _self.select()},30) 
    } 
}); 
14

tôi nhận nó làm việc bằng cách sử dụng mã dưới đây.Phiên bản chrome của tôi: Version 24.0.1312.52

$("#inputid").on("focus",function(e){ 
    $(this).select(); 
}); 

$("#inputid").on("mouseup",function(e){ 
    return false; 
}); 

Hope this helps ...

+4

Đây là giải pháp sạch nhất, nhưng bạn có thể muốn sử dụng 'e.preventDefault()' thay vì 'return false'. – iono

2
<input onClick="this.select()" value="Blabla und Blublu" type="text" /> 

nên làm việc

+0

Chức năng này giống như trong câu hỏi - nó sẽ có cùng một vấn đề. – Izkata

+2

Sự kiện khác: nhấp thay vì lấy nét. Xem http://stackoverflow.com/questions/3150275/jquery-input-select-all-on-focus –

0

tôi đã kiểm tra vấn đề này trên các trình duyệt. Google có vấn đề này, tôi nghĩ Opera cũng vậy. Firefox, IE ok. Tôi đã giải quyết nó bằng this.select() trên cả onclick và onfocus.

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