2010-06-24 42 views
1

文本區:如何知道它在哪個字符中更改爲textarea中的另一行?

click

沒有ENTER在第一線的盡頭,有什麼解決辦法知道在哪個字符則轉爲下一行?舉例來說,它將轉到位於「哪」字符後面或第13個字符後面的下一行。 (SBC的情況下或DBC的情況下的字符可以輸入)。

+0

永遠都不會說Coz。 – Incognito 2010-06-24 15:41:41

+0

是啊,jeez ..它看起來很不專業,以前很難把''b''放進去嗎? – Anurag 2010-06-24 18:56:48

回答

1

那麼,當你創建一個textarea你應該提供的列數,所以如果它包裝,因爲它已經到達行的末尾,似乎公平假定字符數是您指定的列數。或者我錯過了什麼?

+0

感謝您的回答。但cols屬性對於SBC大小寫字符不是很有用。例如:我寫道: 只能輸入5個SBS大小寫字符或輸入9個DBC大小寫字母。 如果我使用屬性[wrap =「physical」],它會在第一行的末尾添加ENTER,但是我無法識別哪個輸入是用戶輸入的,哪個是它在textarea內容顯示時自動添加的那個下次。 – 2010-06-24 15:59:33

0

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的,可能在二送打破。另外需要一些額外的計算來確定一行是自動換行還是換行換行(在鏈接代碼中有些處理),並且可能會遇到由多個空格/換行符分隔的單詞。但這是基本的想法。

如果有一個更簡單的解決方案,我不知道它。

相關問題