我有一个表格,用于显示某些信息,供用户“批准”或“拒绝”某些项目。我创建了两个图像:拒绝的十字标记和批准的检查标记。在每次单击时,我将唯一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()中删除该项目。不知道该怎么做。提前谢谢。
答案 0 :(得分:2)
我使用的是数组而不是隐藏的输入。这样,您可以轻松地在数组中搜索已有的值,添加新值以及删除值。然后,在操作完成后,使用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" />
答案 1 :(得分:1)
一个选项是代替您操作的1个输入,包括每个项目的唯一隐藏输入。然后在按下按钮时仅更改该输入。然后,您有几个选项:在提交时在客户端聚合它们,在服务器端自动聚合它们(取决于您的服务器端)。
答案 2 :(得分:0)
我会采取以下方法来完成你的任务:
<div class="project">
<span>some project elements</span>
<input name="number" type="hidden" value="1"/>
<a class="reject">Reject</a>
<a class="approve">Approve</a>
</div>
<script>
// Manipulating css classes on reject.
$(".reject").click(function(){
$(this).parent().removeClass("approved").addClass("rejected");
});
// How to get all rejected numbers?
var rejected_numbers = $.map($(".project.rejected :hidden"), function(){
return $(this).val();
}).join(",");
</script>
答案 3 :(得分:0)
使用类例如。 “选中”以识别已批准的项目。只要点击按钮,运行检查&amp;然后相应地采取行动。