Вопрос Справочной информации:JQuery - Невозможно получить доступ к данным нескольких Просмотров элементов
У меня есть приложение MVC, который имеет вид, содержащий 3 панель. В каждой соответствующей панели есть отдельная кнопка, которая при щелчке должна передать данные, переданные из переданного объекта модели в пределах Панели, методу на контроллере с именем «AddToCart».
Выпуск:
Вот код зрения:
<div class="row mePadding" id="features">
<input id="productId" type="hidden" value="@Model.ElementAt(0).Id">
<input id="productImage" type="hidden" value="@Model.ElementAt(0).ProductImage">
<input id="productBrand" type="hidden" value="@Model.ElementAt(0).ProductBrand">
<div class="col-sm-4 feature">
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title boldFeatures" id="productName">@(Model.ElementAt(0).ProductName)</h3>
</div>
<div class="panel-body">
<a href="@Url.Action("ProductDetail", "Product", new { id = @Model.ElementAt(0).Id })"><img src="~/Images/@(Model.ElementAt(0).ProductImage)" class="img-circle" id="featuresImages" alt="Work"></a>
<p>@(Model.ElementAt(0).ProductSummary)</p>
<p id="productPrice">@(Model.ElementAt(0).ProductPrice)</p>
<input class="btn btn-primary btn-block AddToCart" type="button" data-name="@Model.ElementAt(0).ProductName" data-price="@Model.ElementAt(0).ProductPrice" value="Add to Cart" id="addToCart" />
</div>
</div>
</div>
<input id="productId" type="hidden" value="@Model.ElementAt(1).Id">
<input id="productImage" type="hidden" value="@Model.ElementAt(1).ProductImage">
<input id="productBrand" type="hidden" value="@Model.ElementAt(1).ProductBrand">
<div class="col-sm-4 feature">
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title boldFeatures" id="productName">@(Model.ElementAt(1).ProductName)</h3>
</div>
<div class="panel-body">
<a href="@Url.Action("ProductDetail", "Product", new { id = @Model.ElementAt(1).Id })"><img src="~/Images/@(Model.ElementAt(1).ProductImage)" class="img-circle" id="featuresImages" alt="Work"></a>
<p>@(Model.ElementAt(1).ProductSummary)</p>
<p id="productPrice">@(Model.ElementAt(1).ProductPrice)</p>
<input class="btn btn-primary btn-block AddToCart" type="button" data-name="@Model.ElementAt(1).ProductName" data-price="@Model.ElementAt(1).ProductPrice" value="Add to Cart" id="addToCart" />
</div>
</div>
</div>
<input id="productId" type="hidden" value="@Model.ElementAt(2).Id">
<input id="productImage" type="hidden" value="@Model.ElementAt(2).ProductImage">
<input id="productBrand" type="hidden" value="@Model.ElementAt(2).ProductBrand">
<div class="col-sm-4 feature">
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title boldFeatures" id="productName">@(Model.ElementAt(2).ProductName)</h3>
</div>
<div class="panel-body">
<a href="@Url.Action("ProductDetail", "Product", new { id = @Model.ElementAt(2).Id })"><img src="~/Images/@(Model.ElementAt(2).ProductImage)" class="img-circle" id="featuresImages" alt="Work"></a>
<p>@(Model.ElementAt(2).ProductSummary)</p>
<p id="productPrice">@(Model.ElementAt(2).ProductPrice)</p>
<input class="btn btn-primary btn-block AddToCart" type="button" data-name="@Model.ElementAt(2).ProductName" data-price="@Model.ElementAt(2).ProductPrice" value="Add to Cart" id="addToCart" />
</div>
</div>
</div>
</div>
<script>
$(this).click(function (e) {
$.ajax({
url: '@Url.Action("AddToCart")',
type: 'POST',
data: {
"id": $('#productId').val(),
"name": $('#productName').text(),
"qty": "1",
"price": $('#productPrice').text(),
"brand": $('#productBrand').val(),
"image": $('#productImage').val()
}
});
});
</script>
Проблема заключается в том, что она доцент независимо от того, какую кнопку жму на 3 панели данных модели, установленные в первой панели всегда отправляется методу контроллера AddToCart.
Я попытался следующие, но это не сработало:
"id": $(this).get('#productId').val()
Любая помощь с этим было бы здорово.
EDIT - 12/02/2015
View теперь генерирует панели через цикл - в настоящее время установлен в 9, как Thats, сколько элементов я хочу, отображаемых на представлении:
<div class="row mePadding" id="features">
@for (int i = 0; i < 9; i++)
{
<div class="col-sm-4 feature">
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title boldFeatures">@(Model.ElementAt(i).ProductName)</h3>
</div>
<div class="panel-body">
<a href="@Url.Action("ProductDetail", "Product", new { id = @Model.ElementAt(i).Id })"><img src="~/Images/@(Model.ElementAt(i).ProductImage)" class="img-circle" id="featuresImages" alt="Work"></a>
<p class="summary">@(Model.ElementAt(i).ProductSummary)</p>
<p class="price">@(Model.ElementAt(i).ProductPrice)</p>
<input class="btn btn-primary btn-block AddToCart" type="button" data-id="@Model.ElementAt(0).Id" value="Add to Cart" />
</div>
</div>
</div>
}
</div>
JQuery Button click:
Я удалил логику, чтобы фактически отправить идентификатор на метод AddToCart
на контроллере, поэтому я могу просто проверить идентификаторы, когда нажата кнопка.
<script>
$(".AddToCart").click(function() {
var id = $(this).data('id');
alert(id);
});
</script>
Вашего недействительное HTML дублирующих 'id' атрибуты. '$ ('# productId'). val()' всегда будет возвращать значение первого элемента с 'id =" productId "'. Удалите атрибуты id (используйте вместо этого имя класса) и получите значения с помощью селекторов, которые получают элемент по отношению к нажатой кнопке. –
@StephenMuecke Спасибо за ваш ответ. Я удалил атрибуты id и вместо этого добавил имена имен классов. В моем JQuery я все еще вызываю это, и я пытаюсь использовать следующее, чтобы получить данные с помощью селектора '.prodName' -' var productName = $ (". ProdName").text(); 'Это снова дает мне все данные в представлении с именем класса .test'. Можете ли вы уточнить, когда говорите «получить элемент по отношению к нажатой кнопке»? – user1352057
Вы хотите вызвать это, когда нажимаете одну из кнопок со значением «Добавить в корзину»? Его немного сложно понять, почему вы не просто сгенерировали html в цикле, а не повторяли его 3 раза, а также почему у вас вообще есть скрытые входы. –