2017-03-13 74 views
1

如果我有一個列表框和文本區域:更新文本區域價值

<textarea id="MyTextArea"></textarea> 

<select id="SelectList" multiple> 
    <option value="volvo">Volvo</option> 
    <option value="saab">Saab</option> 
    <option value="mercedes">Mercedes</option> 
    <option value="audi">Audi</option> 
</select> 

我想做的是......如果有超過0選擇的選項..然後追加文本There are selections到textarea。

如果用戶取消選擇選項到有0選定選項的點,然後從textarea中刪除該字符串,但保留用戶在該textarea中鍵入的任何內容。

以下是我有:

$("#SelectList").change(function(){ 
    var count = $("#SelectList> option:selected").length; 
    var string = "There are selections."; 
    var txtVal = $("#MyTextArea").val(); 

    if (count > 0 && txtVal.indexOf(string) == -1) { 
     $("#MyTextArea").append(string); 
    } 
    else if (count > 0 && txtVal.indexOf(string) != -1) { 
    } 
    else if (count === 0 && txtVal.indexOf(string) != -1) { 
     var indexOfString = $("#MyTextArea").value.indexOf(string); 
     $("#MyTextArea").value.substring(0, indexOfString - 1); 
    } 
}); 

這適用於添加字符串只有一次。但是,當我取消選擇所有的選項,以便有0的選擇。我得到這個:

無法獲取的未定義或空引用

財產「的indexOf」在這一行:var indexOfString = $("#MyTextArea").value.indexOf(string);

任何幫助表示讚賞。

回答

2

它應該是:

var indexOfString = $("#MyTextArea").val().indexOf(string); 

由於$("#MyTextArea")是一個jQuery元件

2

.value是一個純粹的JS方法,你不能把它的jQuery對象$("#MyTextArea")上,而不是你可以使用val(),如:

$("#MyTextArea").val().indexOf(string); 

既然你已經存儲在變量txtVal值你可以只是這樣稱呼它:

$("#SelectList").change(function(){ 
    ... 
    else if (count === 0 && txtVal.indexOf(string) != -1) { 
     var indexOfString = txtVal.indexOf(string); 
     txtVal.substring(0, indexOfString - 1); 
    } 
}); 

注:你不應該在textarea使用append()方法來代替ü SE .val()

$("#MyTextArea").val(txtVal + string); 

相反的:

$("#MyTextArea").append(string); 

希望這有助於。