2010-01-25 54 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

使用一個類爲例如。 '選定'來識別已批准的項目。無論何時點擊該按鈕,請執行檢查&然後執行相應的操作。