我使用下面的jquery根据已选中或未选中的复选框值自动填充文本框
function updateTextArea() {
var allVals = [];
$('#all :checked').each(function () {
allVals.push($(this).val());
});
document.getElementById('txtbox').value = allVals;
}
$(function () {
$('#all input').click(updateTextArea);
updateTextArea();
});
我的html代码是
<div id="all">
<input id="txtbox" type="text" Height="100px" Width="770px" />
<input id="Checkbox2" type="checkbox" value="abc1@abc.com" />
<input id="Checkbox3" type="checkbox" value="abc2@abc.com" />
<input id="Checkbox4" type="checkbox" value="abc3@abc.com" />
<input id="Checkbox5" type="checkbox" value="abc4@abc.com" />
</div>
以上jquery适用于每次检查并取消选中复选框的事件,并将其值填充到以逗号分隔的文本框中,我的问题是,如果有人手动输入上面文本框中用逗号分隔的某些电子邮件,我希望保留该值并且不要刷新检查和取消选中我的复选框的事件。我怎样才能做到这一点?
答案 0 :(得分:2)
我将用来解决这个问题的一般技巧是:
每次检查或取消选中:
1.用逗号将列表拆分成数组
2.收集所有已检查的预设电子邮件值(您已经这样做了)
3.找到不在预设数组中的每个分割值,并将其放在一边
4.插入所有已检查的预设值,然后添加所有奇数值,反之亦然。
这不会保留顺序,但会保留任何手动输入的值。保留订单可以完成,但会有点棘手。
您可能还会考虑使用单独的“附加电子邮件”文本框,这样可以降低此复杂性,并可能使用户更直观。
代码:
function updateTextArea() {
var allVals = [];
var checkedVals = [];
$('#all input[type=checkbox]').each(function () {
allVals.push($(this).val());
});
$('#all :checked').each(function () {
checkedVals.push($(this).val());
});
var potentialOtherEmails = $("#txtbox").val().split(",");
var confirmedOtherEmails = [];
$(potentialOtherEmails).each(function(index,value) {
if ($.inArray(value, allVals) == -1) {
confirmedOtherEmails.push(value);
}
});
$("#txtbox").val($.merge(checkedVals,confirmedOtherEmails));
}
$(function () {
$('#all input').click(updateTextArea);
updateTextArea();
});
答案 1 :(得分:1)
你去.... [/ p>
$(function () {
txtbox = $("#txtbox");
var prevVal;
$("input[type='checkbox']").click(function() {
prevVal = txtbox.val();
if($(this).is(":checked"))
{
txtbox.val(prevVal + $(this).val() + ", ");
}
else
{
prevVal = prevVal.replace($(this).val()+", ", "");
txtbox.val(prevVal);
}
});
});
关于现有代码的一个注意事项,你要过多地查询DOM(在每次检查时迭代复选框),不要这样做。另外,为什么在有JQuery可用时使用document.getElementById
? :-)这个可能不是一个完美的解决方案,但有效!!