$('.inp').click(function(){
var arr = [];
var id = $(this).attr('id');
var value = $(this).val();
if(value == 'empty') {
$(this).val(id+'ON');
arr.push(value);
}
if(value == id+'ON') {
arr.splice(arr.indexOf(value), 1);
$(this).val(id+'OFF');
arr.push(value);
}
if(value == id+'OFF') {
$(this).val('empty');
arr.splice(arr.indexOf(value), 1);
}
$('.txt').val(arr.join(','));
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form>
<input class='txt' type='input'>
<input class='inp' id='x' type='button' value='empty'>
<input class='inp' id='y' type='button' value='empty'>
<input class='inp' id='z' type='button' value='empty'>
</form>
在我的脚本中,我试图让.txt
仅获取值ON, OFF
,但在部分中
if(value == 'empty') {
$(this).val(id+'ON');
arr.push(value);
}
.txt
推送empty
而不是新值id+ON
此外,当我点击另一个按钮时,整个.txt
将被删除并仅添加点击的按钮值,
例如,如果我点击#x
,则.txt
应为xON
,如果我点击#y
,而.txt
的值为xON
我希望它为xON,yON
,但它只变为yON
。
答案 0 :(得分:3)
对于每个按钮单击var arr = [];
,此语句为您创建一个空数组。这应该从现有的文本字段中填充。
答案 1 :(得分:2)
因为你正在使用它:
var value = $(this).val();//the value of the pressed button is always "empty"
而不是:
var value = id+'ON';
或:
arr.push(id+'ON');
您说var value
包含"empty"
,因此array
会推送值empty
。
答案 2 :(得分:2)
从问题措辞中不完全清楚完整要求是什么,但我认为这可能是您正在寻找的。 p>
$(function() {
var list = {};
$('.inp').click(function() {
var id = $(this).attr('id');
var value = $(this).val();
var newVal = id;
if (value == 'empty') {
newVal += 'ON';
$(this).val(newVal);
list[id] = newVal;
}
if (value == id + 'ON') {
newVal += 'OFF';
$(this).val(id + 'OFF');
list[id] = newVal;
} else if (value == id + 'OFF') {
$(this).val('empty');
list[id] = null;
}
console.log(JSON.stringify(list));
var output = "";
for (key in list) {
if (list[key] != null) {
if (output != "") output += ",";
output += list[key];
}
}
$('.txt').val(output);
});
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form>
<input class='txt' type='input'>
<input class='inp' id='x' type='button' value='empty'>
<input class='inp' id='y' type='button' value='empty'>
<input class='inp' id='z' type='button' value='empty'>
</form>
&#13;
如果这不是你的意思,那么请澄清究竟需要什么。
答案 3 :(得分:1)
你可能想要这样的东西:
$(function() {
var values = {};
$('.inp').click(function() {
var id = $(this).attr('id'),
value = $(this).val(),
newVal = id,
finalVal = '';
if (value == 'empty') {
newVal += 'ON';
values[id] = '';
} else {
if (value == (id + 'ON'))
newVal += 'OFF';
else
newVal = 'empty';
values[id] = value;
}
$(this).val(newVal);
for (key in values) {
if (values.hasOwnProperty(key) && !!values[key]) {
finalVal += values[key];
}
}
$('.txt').val(finalVal);
});
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form>
<input class='txt' type='input'>
<input class='inp' id='x' type='button' value='xON'>
<input class='inp' id='y' type='button' value='yON'>
<input class='inp' id='z' type='button' value='zON'>
</form>
&#13;
答案 4 :(得分:1)
您变为空而不是id+'ON'
的原因是因为变量value
包含字符串'empty',因此由值分配的基元。在按值分配的javascript中,与通过引用赋值相反,暗示除非重新分配,否则变量中的值不能更改。要获得新值,您应在value = $(this).val();
之前致电arr.push(value);
,以便推送更新的value
。
因为您在单击处理程序中声明了arr
,所以每次单击一个按钮时,都会重新初始化该数组。要获得所需的结果,请将声明var arr = [];
移到回调函数之外。
此外,您不应在阻止arr.splice(arr.indexOf(value), 1);
中调用if(value == id+'ON')
,因为这会将其从arr
中删除。而你的历史将不一致。如果您不希望值empty
出现在.txt
输入中。从块arr.push(value);
if(value == 'empty')
请参阅this pen所述的修改内容。