Có cách nào để có một sự kiện văn bản kích hoạt sự kiện nếu người dùng thay đổi dòng chữ trên, bằng cách nhấp hoặc sử dụng mũi tên lên/xuống? Hay điều này không thể thực hiện được trong Javascript? Tôi đã tìm cách tìm/thiết lập vị trí hiện tại của dấu mũ, nhưng đó không phải là những gì tôi cần ...Sự kiện kích hoạt khi dấu mũ di chuyển giữa các dòng trong textarea
Trả lời
Có vẻ như bạn cần đăng ký một vài sự kiện cho vùng văn bản của bạn. trên đầu của tôi, một sự kiện bấm, và một sự kiện nhấn phím với nhiều giá trị mã phím. Bạn có cần phải sử dụng javascript tinh khiết, hoặc bạn có một số thư viện javascript để sử dụng?
Bạn có cần trợ giúp đăng ký sự kiện không? hoặc bạn cần trợ giúp tìm vị trí dấu mũ trong một trong các sự kiện? (xem liên kết của Andy cho điều đó) hoặc là câu trả lời cho cả hai câu hỏi của tôi "có"?
chỉnh sửa
ok, từ ý kiến mà bạn đang bạn ok với jquery, và các plugin fieldselection ngăn bạn lại phát minh ra bánh xe.
- xác định mọi phím, nhấp chuột, sao chép? các sự kiện có thể di chuyển dấu mũ trong trường văn bản. Navigate and select portions of text, wikipedia
- trong sự kiện, sử dụng plugin chọn trường để nhận vị trí dấu mũ mới.
- sử dụng vị trí hiện tại caret & & font size & hộp & văn bản kích thước vật lý & đếm & linebreak để xác định xem bạn đã chuyển sang một dòng mới.
- nếu bạn đã chuyển đổi dòng, kích hoạt sự kiện jQuery tùy chỉnh để thực hiện công việc bạn muốn.
// jQuery 1,7
$(document).ready(function(){
var currentLine = -1;
$("#textAreaID").on("keypress", function(evt){
if(evt.which === 40 || ...){
//down arrow key, enter key, page down key, all will move the caret to a newline
$(this).trigger("newline");
}else{
//a ton of text in a fixed width textarea will move the cursor to a newline
$(this).trigger("checkForNewline");
}
}).on("click checkForNewline", function(evt){
var jqElem = $(this);
//fieldSelection plugin call
var range = jqElem.getSelection();
if(range["row"] && range["row"] !== currentLine){
currentLine = range["row"];
jqElem.trigger("newline");
}else{
var handTypedNewlines = jqElem.val().split(/\r\n|\r|\n/);
var userTypedRowcounts = Math.floor(wholeString.length/jqElem.cols) + (handTypedNewlines instanceof 'object')?handTypedNewlines.length:0;
if(userTypedRowcounts != currentLine){
currentLine = userTypedRowcounts;
jqElem.trigger("newline");
}
}
}).on("newline", function(evt){
// do your work, caret is on a newline.
});
});
tham chiếu stack overflow.
http://stackoverflow.com/q/1937120/176818 và đây là ví dụ về plugin chọn trường jQuery http://laboratorium.0xab.cd/jquery/fieldselection/0.2.3-test/test.html – DefyGravity
Xem nhận xét của tôi ở trên ...Vì vậy, nó có vẻ như nó sẽ là khả thi, và cách để làm điều đó là bằng cách theo dõi các nhấp chuột và bấm phím và sau đó so sánh dòng trước và hiện tại và xem nếu có một sự thay đổi? Tôi có thể hình dung ra, một khi tôi thấy chiến lược. – NumerousHats
Và có, tôi không phản đối thư viện. Tôi gần như chắc chắn sẽ được sử dụng jQuery cho các khía cạnh khác của dự án (nếu tôi chọn để làm điều đó như là một webapp ...) – NumerousHats
thể trùng lặp của [Tìm giá trị của dòng hiện tại của một
@AndyE Có sự khác biệt đáng kể giữa \ n và dòng mà người dùng nhìn thấy trong vùng văn bản. Ví dụ: nhận xét này không có dòng đơn mới nhưng tôi đã ở dòng thứ ba của vùng văn bản :) – Esailija
@Esailija: OP không đủ cụ thể để chúng tôi nói, nhưng đáng giá chỉ trong trường hợp đó là những gì anh ta đang tìm kiếm. Đó là lý do tại sao bình luận nói * "có thể trùng lặp ..." *. –