问题描述
我在具有文本框的列上具有javascript OnChange函数,该文本框捕获列中每一行的名称。 我将所有名称附加并存储在变量中。 现在,假设用户再次单击相同的文本框,我不想再次添加该名称。
var AppendedString = null; function onChangeTest(textbox) { AppendedString = AppendedString; AppendedString = AppendedString + ';' + textbox.name; // this gives null;txt_2_4;txt_2_6;txt_3_4;txt_2_4 and so on..and I don't want to append same name again , here it's txt_2_4 }
我的输入文字:
<input type="text" name="txt_<%=l_profileid %>_<%=l_processstepsequence%>" value="<%= l_comments%>" onfocus="this.oldvalue = this.value;" onchange="onChangeTest(this);this.oldvalue = this.value;">
1楼
这些行似乎具有唯一的名称。 您可以简单地检查AppendedString是否已经包含该名称:
var AppendedString=''
function onChangeTest(textbox) {
if (!AppendedString.includes(textbox.name)) {
AppendedString += ';' + textbox.name;
}
}
您不能将AppendedString
初始化为null
否则, includes()
方法将不可用
否则,您可以为每行赋予唯一的ID,并将用户已经单击的ID存储在数组中。
var AppendedString = '';
var clickedRows = [];
function onChangeTest(textbox) {
if (!clickedRows.includes(textbox.id)) {
AppendedString += ';' + textbox.name;
clickedRows.push(textbox.id)
}
}
2楼
var arr = []; $("input[type='text']").on("click", function() { var nowS = ($(this).attr('name')); if (!(arr.indexOf(nowS) > -1)) { arr.push(nowS) } console.log(arr) });
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <input type="text" id="m1" name="lbl1"> <input type="text" id="m2" name="lbl2"> <input type="text" id="m3" name="lbl3">
与您的需求有些相似,
var arr = []; $("input[type='text']").on("click", function() { var nowS = ($(this).attr('name')); if (!arr.includes(nowS)) { arr.push(nowS) } console.log(arr) });
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <input type="text" id="m1" name="lbl1"> <input type="text" id="m2" name="lbl2"> <input type="text" id="m3" name="lbl3">
3楼
您可以添加标记文本框,如果再次单击它,则将其忽略。 就像使用jquery一样,您可以执行以下操作:
function onChangeTest(textbox) {
AppendedString = AppendedString;
if (!textbox.hasClass("clicked")){
AppendedString = AppendedString + ';' + textbox.name;
textbox.AddClass("clicked");
}
}