根据列表框选择的数量更新 TextArea 值
Update TextArea value based on number of listbox selections
如果我有一个列表框和一个文本区域:
<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
附加到文本区域。
如果用户取消选择的选项达到 0
个选定选项的程度,则从文本区域中删除该字符串,但保留用户在该文本区域中键入的任何其他内容。
这是我的:
$("#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
个选择时..我得到这个:
Unable to get property 'indexOf' of undefined or null reference
这一行:var indexOfString = $("#MyTextArea").value.indexOf(string);
感谢任何帮助。
.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()
方法,而是使用 .val()
:
$("#MyTextArea").val(txtVal + string);
而不是:
$("#MyTextArea").append(string);
希望这对您有所帮助。
应该是:
var indexOfString = $("#MyTextArea").val().indexOf(string);
因为$("#MyTextArea")
是一个jQuery元素
如果我有一个列表框和一个文本区域:
<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
附加到文本区域。
如果用户取消选择的选项达到 0
个选定选项的程度,则从文本区域中删除该字符串,但保留用户在该文本区域中键入的任何其他内容。
这是我的:
$("#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
个选择时..我得到这个:
Unable to get property 'indexOf' of undefined or null reference
这一行:var indexOfString = $("#MyTextArea").value.indexOf(string);
感谢任何帮助。
.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()
方法,而是使用 .val()
:
$("#MyTextArea").val(txtVal + string);
而不是:
$("#MyTextArea").append(string);
希望这对您有所帮助。
应该是:
var indexOfString = $("#MyTextArea").val().indexOf(string);
因为$("#MyTextArea")
是一个jQuery元素