我有一个表格,其中显示一些信息,供用户“批准”或“拒绝”某些项目。我创建了两个图像:十字符号表示拒绝,复选符号表示批准。每次单击时,我都会将唯一的 ID 添加到其各自的隐藏表单字段(rejectedProjs 和approvedProjs)。此外,如果用户单击“拒绝”,那么我将显示一个文本框,以便他们可以输入原因。这是我到目前为止所拥有的:
$("a[name^=reject-]").each(function() {
var name = $(this).attr('name');
var p_project_number = name.split('-')[1];
$("a[name=reject-"+p_project_number+"]").tipbox("Reject pricing for "+p_project_number, 0, "reject-"+p_project_number);
$(this).click(function() {
$("textarea[name=rejReason-"+p_project_number+"]").show();
rP = $("#rejectedProjs").val();
$("#rejectedProjs").val(rP+','+p_project_number);
alert('rejects: '+$("#rejectedProjs").val());
});
});
有两个问题。首先,如果我对同一项目单击拒绝按钮两次,则警报框将显示项目编号两次。如何检查 $("#rejectedProjs").val() 以查看该项目编号是否已经存在?其次,如果我先拒绝然后批准,我需要从 $("#rejectedProjs").val() 中删除该项目。不知道该怎么做。提前致谢。
最佳答案
我会使用数组而不是隐藏输入。通过这种方式,您可以轻松地在数组中搜索现有值、添加新值和删除值。然后,在操作完成后,使用 array.join()
将隐藏输入的值设置为数组。
一个非常简单的示例如下所示:
var accepted = new Array();
var rejected = new Array();
function process(action, id) {
if(action == "accept") {
// look for item in accepted array, add if doesnt exist
if(findInArray(accepted, id) == -1) {
accepted.push(id);
}
// look for item in rejected array, remove if exists
var rejectedIdx = findInArray(rejected, id);
if(rejectedIdx == -1) {
accepted.splice(rejectedIdx, 1);
}
} else {
// The same, but for rejected ids. Not included for brevity...
}
// update hidden inputs
$("hiddenAccepted").val(accepted.join(","));
$("hiddenRejected").val(rejectedaccepted.join(","));
}
function findInArray(array, value) {
for(var i = 0; i < array.length; ++i) {
if(array[i] == value] return i;
}
return -1;
}
并且不要忘记在页面中实际包含隐藏的输入:
<input type="hidden" name="hiddenAccepted" />
<input type="hidden" name="hiddenRejected" />
关于jquery并修改两个隐藏的输入字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2134480/