Javascript Don';如果字符串已经包含OnChange,则不能追加
我在一列上有一个javascript OnChange函数,该列有文本框,用于捕获列中每一行的名称。我将附加所有名称并存储在变量中。 现在,假设用户再次单击相同的文本框,我不想再次附加该名称Javascript Don';如果字符串已经包含OnChange,则不能追加,javascript,html,dom,Javascript,Html,Dom,我在一列上有一个javascript OnChange函数,该列有文本框,用于捕获列中每一行的名称。我将附加所有名称并存储在变量中。 现在,假设用户再次单击相同的文本框,我不想再次附加该名称 var AppendedString=null; 函数onChangeTest(文本框){ AppendedString=AppendedString; AppendedString=AppendedString+';'+textbox.name; //这会产生null;txt_2_4;txt_2_6;t
var AppendedString=null;
函数onChangeTest(文本框){
AppendedString=AppendedString;
AppendedString=AppendedString+';'+textbox.name;
//这会产生null;txt_2_4;txt_2_6;txt_3_4;txt_2_4等等..我不想再附加相同的名称,这里是txt_2_4
}
这些行似乎有唯一的名称。
您只需检查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)
}
}
var arr=[];
$(“输入[type='text']”)。在(“单击”,函数()上){
var nowS=($(this.attr('name'));
如果(!(arr.indexOf(nowS)>-1)){
到达推送(nowS)
}
控制台日志(arr)
});代码>
您可以添加标记文本框,并在再次单击时忽略它。与使用jquery一样,您可以执行以下操作:
function onChangeTest(textbox) {
AppendedString = AppendedString;
if (!textbox.hasClass("clicked")){
AppendedString = AppendedString + ';' + textbox.name;
textbox.AddClass("clicked");
}
}
是,行是唯一的。我尝试了你的代码,但它什么也没做。甚至,为了测试,警报也不会被触发。您是否将AppendedString初始化为空字符串?是的,我初始化了,它显示为空警报,而null则在警报中显示为null。这意味着它没有附加antyhing。我的答案中有一个错误,我正在检查包含(textbox)
。可能是我做错了什么,而不是includes(textbox.name)
。当我在没有if语句的情况下运行代码,并使用alert进行检查时,每次单击文本框后,我都会得到所有的名称,但当我应用if语句时,每次单击文本框后都不会触发alert。我只需要使用javascript。要运行和检查网页中的代码,我需要编写alert而不是console.log。对吗?是的,它在Chrome上工作但我需要一些类似的东西给IE。有什么黑客吗?。谢谢你们的帮助。我在代码中添加了一些小的改动,这在chrome和IE上都可以使用。我无法升级投票,但我已经将其标记为答案。我可以拆分输出吗?我得到了txt_2_4,所以我想选择2和4并将其存储在一个变量中。是的,您可以,但您必须保持与数字相同的名称。例如lbl1,lbl2。使用var m=“lbl1”;控制台日志(m.slice(3))