文本區:如何知道它在哪個字符中更改爲textarea中的另一行?
沒有ENTER在第一線的盡頭,有什麼解決辦法知道在哪個字符則轉爲下一行?舉例來說,它將轉到位於「哪」字符後面或第13個字符後面的下一行。 (SBC的情況下或DBC的情況下的字符可以輸入)。
文本區:如何知道它在哪個字符中更改爲textarea中的另一行?
沒有ENTER在第一線的盡頭,有什麼解決辦法知道在哪個字符則轉爲下一行?舉例來說,它將轉到位於「哪」字符後面或第13個字符後面的下一行。 (SBC的情況下或DBC的情況下的字符可以輸入)。
那麼,當你創建一個textarea你應該提供的列數,所以如果它包裝,因爲它已經到達行的末尾,似乎公平假定字符數是您指定的列數。或者我錯過了什麼?
感謝您的回答。但cols屬性對於SBC大小寫字符不是很有用。例如:我寫道: 只能輸入5個SBS大小寫字符或輸入9個DBC大小寫字母。 如果我使用屬性[wrap =「physical」],它會在第一行的末尾添加ENTER,但是我無法識別哪個輸入是用戶輸入的,哪個是它在textarea內容顯示時自動添加的那個下次。 – 2010-06-24 15:59:33
cols
屬性決定了textarea
元素的寬度,但通常會被樣式表和width
屬性覆蓋。即使沒有CSS設置的寬度,cols
並不是由大多數瀏覽器嚴格執行的(在Chrome中,至少只要垂直滾動條存在就是準確的),而且行通常包含在字邊界而不是字符。
這是一個醜陋的解決方案,但它應該工作。我們的想法是將textarea元素的高度設置爲0,然後從其值字符串的末尾逐個刪除單詞,並檢查scrollHeight
屬性的更改。
//make scrollbars take up space even when they are not needed
//necessary to keep space available for text constant
txtarea.style.overflow = 'scroll !important';
txtarea.style.height = '0px !important';
var tmpvalue = txtarea.value;
var currentscroll = txtarea.scrollHeight;
var wrapat = [];
var parts;
//Regex breaks textarea value into ['every word but the last', 'one']
while (parts = txtarea.value.match(/([^\0]*)\s\w*/m)) {
txtarea.value = parts[1];
//scrollHeight has changed, add wrap index to array
if (txtarea.scrollHeight < currentscroll) {
wrapat.push(txtarea.value.length-1);
currentscroll = txtarea.scrollHeight;
}
}
//sort wrap array for niceness
wrapat = wrapat.sort(function(a,b) { return a-b; });
//restore everything to normal
txtarea.value = tmpvalue;
txtarea.style.height = '';`
嘗試代碼在這裏http://jsbin.com/alasa3/edit
可能有錯誤,比如這個代碼不處理長「字」,如URL的,可能在二送打破。另外需要一些額外的計算來確定一行是自動換行還是換行換行(在鏈接代碼中有些處理),並且可能會遇到由多個空格/換行符分隔的單詞。但這是基本的想法。
如果有一個更簡單的解決方案,我不知道它。
永遠都不會說Coz。 – Incognito 2010-06-24 15:41:41
是啊,jeez ..它看起來很不專業,以前很難把''b''放進去嗎? – Anurag 2010-06-24 18:56:48