如果我有一个列表框和一个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> &'
感谢任何帮助。
答案 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);
希望这有帮助。