2012-11-16 46 views
2

我也想得到「行屍走肉」,但它只能得到第一個隱藏。我可以把課程放在這個上面嗎?或者我應該怎麼做?如何以相同的輸入類型使用兩個.siblings?

$(".articel input[type='button']").click(function(){      
     var price = $(this).siblings("input[type='hidden']").attr("value"); 
     var quantity = $(this).siblings("input[type='number']").attr("value"); 
     var name = $(this).siblings("input[type='hidden']").attr("value"); 
     var ul = document.getElementById("buylist"); 
     var prod = name + " x " + quantity + " " + price + "$"; 

     var el = document.createElement("li"); 
     el.innerHTML = prod; 
     ul.appendChild(el); 

<form class="articel"> 
     Quantity: <input type="number" style="width:25px;"><br> 
     Add to cart: <input type="button" class="btn"> 
     <input type="hidden" value="30"> 
     <input type="hidden" value="The walking dead"> 
</form> 

回答

2

傳統的識別表單域的方法是使用name屬性。

HTML:

<input type="hidden" name="title" value="The walking dead"> 

的jQuery:

var name = $(this).siblings('input[name=title]').val(); 

您當前選擇,siblings("input[type='hidden']"),選擇所有隱藏字段的兄弟姐妹,但因爲你沒有辦法辨別他們,attr將永遠只是產生第一場比賽的價值。

您也可以迭代您的元素集合,或者通過索引siblings('input[type=hidden]:eq(1)')siblings('input[type=hidden]').eq(1)訪問它們,但是如果您爲其他內容添加另一個隱藏字段,這是一個糟糕的設計,會破壞您的代碼。您真的應該更願意爲您的元素命名,以便您可以有意義地訪問它們並知道您的數據。這樣,您可以隨意移動並根據新的要求修改標記,而不會中斷腳本。

順便說一句,我使用上面的.val(),這是.attr('value')的簡寫。

+0

謝謝,這工作得很好。 – JJeff

+0

啊,確實看到你使用了.val的.attr('value')。感謝您的額外信息。 – JJeff

+0

我可以在這裏問另一個問題嗎?只要你知道一個簡單的方法讓數量輸入只接受整數而不是小數? – JJeff

2

一種選擇是使用特殊的選擇器,例如, :first:last

var price = $(this).siblings("input[type='hidden']:first").attr("value"); 
var name = $(this).siblings("input[type='hidden']:last").attr("value"); 

但是,你總是可以設置一個類名的元素:

<input type="hidden" class="price" value="30"> 
<input type="hidden" class="name" value="The walking dead"> 

var price = $(this).siblings(".price").attr("value"); 
var name = $(this).siblings(".name").attr("value"); 
+0

謝謝,我用Davids回答。 – JJeff

2

我想補充一個類名來隱藏的輸入(價格,名稱)。這樣,html源代碼更具可讀性,而且js代碼更具可讀性。

+0

謝謝,我只是試過Davids和用過的名字。 – JJeff

相關問題