2011-07-27 22 views
6

tôi là sau khi các chức năng sau:Javascript: giải pháp trình duyệt chéo để lựa chọn tất cả các văn bản bên trong một textbox trên tập trung

  • người dùng nhấp vào hoặc tab vào một textbox
  • tất cả văn bản trong hộp văn bản được chọn, trừ khi hộp văn bản đã có tiêu điểm, trong trường hợp này, chức năng nhấp/chọn mặc định sẽ xảy ra

Điều này có thể?


này hoạt động trong Firefox 5

$('input[type="text"]').live('focus', function() { 
    this.select(); 
}); 

http://jsfiddle.net/HmQxZ/13/

Chrome và IE8 sẽ chọn tất cả các văn bản cho chỉ một tíc tắc


này hoạt động * trong Chrome

$('input[type="text"]').live('click', function() { 
    this.select(); 
}); 

http://jsfiddle.net/HmQxZ/12/

Firefox và IE8 chọn tất cả văn bản nhưng khi nhấp vào tiếp theo, văn bản vẫn được chọn.

* loại tác phẩm, sau khi hộp văn bản đã tập trung, nhấp vào nó xen kẽ giữa việc chọn tất cả văn bản và có thể nhấp vào nơi dấu nháy mắt nhấp nháy. Điều này có lẽ là chấp nhận được.

+0

Tôi chưa thử nghiệm nó ra, nhưng không lựa chọn có lập trình tất cả văn bản khiến nó cuộn lên đầu/đầu hoặc cuối/cuối của trường giống như cách người dùng chọn bằng cách nhấn ctrl-A (giả sử có đủ văn bản được nhập để có thể cuộn, rõ ràng)? Nếu vậy tôi sẽ cố gắng tránh thực hiện nó trên một sự kiện nhấp chuột mà người dùng có thể đang cố gắng nhấp vào điểm mà họ muốn bắt đầu nhập. – nnnnnn

Trả lời

9

Chỉ cần trì hoãn nó bằng một phần nghìn giây với setTimeout:

$('input[type="text"]').live('focus', function() { 
    var inp = this; 
    setTimeout(function() { 
     inp.select(); 
    }, 1); 
}); 

http://jsfiddle.net/HmQxZ/14/

gì đang xảy ra là một số sự kiện trình duyệt khác là thiết lập các lựa chọn sau khi bạn đã đã chọn văn bản. Vì vậy, bằng cách đợi một phần nghìn giây, bạn cho phép tất cả các sự kiện trình duyệt kết thúc, và sau đó chọn văn bản. Không có gì sẽ hoàn tác nó ngay bây giờ.

+0

Truyền thuyết. Tất cả các câu trả lời khác vẫn có cùng vấn đề với khả năng tương thích trình duyệt chéo. Bạn có biết sự kiện nào khác sẽ gây ra điều này không? – ajbeaven

+0

@ajbeaven Tôi muốn thử event.preventDefualt() nó phải là sự kiện của bạn đang được ghi đè bởi mặc định (không chọn gì cả): http://api.jquery.com/event.preventDefault/ –

+0

Câu trả lời của bạn đã sửa vấn đề, thêm 'preventDefault' và' return false' như các câu trả lời khác được đề xuất không hữu ích. – ajbeaven

0

Bạn có thể muốn thêm

event.preventDefault(); 
return false; 

đến chức năng của bạn (người đầu tiên). Điều đó có thể khắc phục các trình duyệt khác.

Ngoài ra, thêm event đến chức năng sig:

$('input[type="text"]').live('focus', function (event) { 
+0

thử nhấp hai lần vào hộp văn bản trong firefox hoặc IE8. Một khi bất cứ nơi nào trên hộp văn bản để chọn tất cả các văn bản, và sau đó một lần nữa để thử và di chuyển dấu mũ đến một vị trí trong văn bản. Nhấp chuột thứ hai sẽ chọn lại tất cả văn bản và không định vị dấu mũ. – ajbeaven

0

Bạn nên nhớ để làm một return false; event.stopPropagation(); event.preventDefault() như vậy:

$('input[type="text"]').live('click', function (event) { 
    this.select(); 
    event.stopPropagation(); 
    event.preventDefault(); 
    return false; 
}); 

http://jsfiddle.net/7rYLV/

0

Nếu bạn có thể sử dụng jQuery sau đó bạn có thể làm một cái gì đó như;

$("#myInputField").focus(function(){ 
    // Select input field contents 
    this.select(); 
}); 

// Add this behavior to all text fields 
$("input[type=text]").focus(function(){ 
    // Select field contents 
    this.select(); 
}); 

Taken từ HERE

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