根据列表框选择的数量更新TextArea值

时间:2017-03-13 15:53:00

标签: javascript jquery listbox textarea

如果我有一个列表框和一个textarea:

<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附加到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); } }); 个选定选项的选项,则从textarea中删除该字符串,但保留用户在该textarea中输入的其他内容。

这就是我所拥有的:

0

这适用于仅添加字符串一次。但是当我取消选择所有选项以便有var indexOfString = $("#MyTextArea").value.indexOf(string);个选项时......我明白了:

  

无法获得财产&#39; indexOf&#39;未定义或空引用

在这一行:OurClassDOM.h class OurClassDOM { OurClassDOM(){} template<typename T> OurClassDOM(const OurString &n, const T &v) : pDocument(new rapidjson::Document(n, v)){} OurClassDOM(const OurClassDOM &rhs) { pDocument = new rapidjson::Document; //copy it } OurClassDOM(const rapidjson::Document &rhs) { pDocument = new rapidjson::Document; //copy it } virtual OurClassDOM clone() const {return(*this); } private: OurClassDOM &operator=(const OurClassDOM &); ourPtr<rapidjson::Document> pDocument; ... } OurclassDOM.cpp ... void OurClassDOM::parse(const std::string& json) const { rapidjson::StringStream strString(json.c_str()); pDocument->ParseStream(strStream); } ... //compilation error at -> says: error C2662: 'rapidjson::GenericDocument<Encoding> &rapidjson::GenericDocument<Encoding>::ParseStream<0,rapidjson::StringStream>(InputStream &)' : cannot convert 'this' pointer from 'const rapidjson::Document' to 'rapidjson::GenericDocument<Encoding> &'

感谢任何帮助。

2 个答案:

答案 0 :(得分:3)

应该是:

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

因为$("#MyTextArea")是一个jQuery元素

答案 1 :(得分: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);
    } 
});

注意:您不应在append()上使用textarea方法而是使用.val()

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

而不是:

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

希望这有帮助。