2010-01-25 56 views
1

我有一个表,我显示一些信息,用户“批准”或“拒绝”某些项目。我创建了两个图像:拒绝交叉符号和审批签名。在每次点击时,我将独特的ID添加到其各自的隐藏表单字段(rejectedProjs和approvedProjs)。另外,如果用户点击“拒绝”,我会显示一个文本框,以便他们输入一个原因。这是我到目前为止:jquery和修改两个隐藏的输入字段

$("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

你可以发布一些标记去与JavaScript?我们可能会更容易尝试或至少查看相应的标记... – 2010-01-25 18:35:25

回答

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" /> 
+0

真棒阿里尔,谢谢 – CFNinja 2010-01-25 19:38:46

+0

我得告诉你,我喜欢这个剧本!你很有帮助。 – CFNinja 2010-02-03 16:29:04

+0

和jQuery有,你可以改用自己去写它自己的“findInArray”功能 - 只要参数是相反的:$ .inArray(ID,接受) – Colin 2010-10-14 12:14:49

1

一种选择是不是有1个输入你操纵,包括每个项目的独特隐藏的输入。然后在按下按钮时仅更改该输入。然后你有几个选择:在提交时在客户端聚合它们,在服务器端自动聚合它们(取决于你的服务器端)。

+0

在此处插入。非常真实!我创建称为 输入字段 ,我通过clicky修改其VAL。谢谢 – CFNinja 2010-01-25 18:54:33

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> 
0

使用一个类为例如。 '选定'来识别已批准的项目。无论何时点击该按钮,请执行检查&然后执行相应的操作。