iT邦幫忙

0

[JS]Textarea輸入文字傳送到Select元件,如何遇到換行符號自動轉成多個option

  • 分享至 

  • xImage

若textfield輸入值,點下按鈕後會將值傳送到selectid內
https://ithelp.ithome.com.tw/upload/images/20210911/201359673CucfsEKhN.jpg

目前我的程式碼如下,可以順利將值傳過去,輸入123 (enter) 456,傳過去會是被放在同一個option裡面
https://ithelp.ithome.com.tw/upload/images/20210911/20135967u4cen7j1kE.jpg

<body>
    <select id="selectid" multiple="multiple" style="width:30%;height:100%">
    </select>
 
    <input type="button" value="<-輸入項目" id="btnInput" onclick="selectValue()">      

    <label for="textfield"></label>
    <textarea name="textfield" id="textfield" placeholder="輸入項目清單"></textarea>
</body>
 <script>
function selectValue(){
    var str = document.getElementById('textfield').value;

    console.log(str);
    
    console.log(str.replaceAll('\n', ','));

    if(str == ""){
        console.log("str=0");
    }
    else{
        selectid.options.add(new Option(str,str));
    }
}
  </script>

想詢問若我想改成輸入123 (enter) 456,會變成123是一個option,456是另一個option,應該如何改呢?
https://ithelp.ithome.com.tw/upload/images/20210911/20135967o3MUSwGX3U.jpg

謝謝QQ

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

1
大河
iT邦新手 3 級 ‧ 2021-09-11 16:40:48
最佳解答

把 replace 改成 split,根據換行符號切開成陣列後,
在陣列有function forEach直接跑迴圈來逐個加入就行。

備註: 迴圈有trim()是針對前後空白去除,防止只打空白就換行

function selectValue(){
    var str = document.getElementById('textfield').value;
    
	str_array = str.split('\n');
	str_array.forEach(str => {
        str = str.trim();
		if (str !== "") {
			selectid.options.add(new Option(str,str))
		}
	});
}
希希寶 iT邦新手 4 級 ‧ 2021-09-13 11:13:39 檢舉

感謝!!!

2
jerrythepotato
iT邦新手 4 級 ‧ 2021-09-11 16:46:16

其實你要的功能就是能夠判斷'\n',String物件有提供一個很簡單的方法,可以幫你把每一句話切開:string.split()

請試著把這段代碼貼上console應該很好懂:

document.querySelector("#textfield").value.split('\n');

如果就目前的需求,是蠻簡單的,不過直覺你要做的功能還要更複雜ww

希希寶 iT邦新手 4 級 ‧ 2021-09-13 11:14:31 檢舉

是的,這只是一小小塊的東西QQ
感謝!!

我要發表回答

立即登入回答