2017-03-13 142 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); 

希望这有助于。