jquery并修改两个隐藏的输入字段

时间:2010-01-25 18:12:20

标签: jquery

我有一个表格,用于显示某些信息,供用户“批准”或“拒绝”某些项目。我创建了两个图像:拒绝的十字标记和批准的检查标记。在每次单击时,我将唯一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()中删除该项目。不知道该怎么做。提前谢谢。

4 个答案:

答案 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;然后相应地采取行动。