Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Передача параметров из ссылок при их циклической генерации (https://javascript.ru/forum/jquery/56510-peredacha-parametrov-iz-ssylok-pri-ikh-ciklicheskojj-generacii.html)

Neiro 19.06.2015 14:13

Передача параметров из ссылок при их циклической генерации
 
Есть такой код на станице HTML (применяется Razor):

@foreach (var item in Model) {
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.PetName)
        </td>
        <td>
            <a href="#" id="linkCarInfo" data-num=@item.Id>Описание</a>
        </td>
    </tr>
}
, генерируются ссылки для описания авто, которое должно выводиться на странице ниже в отдельном блоке div:
<div id="carInfo"></div>
.

Для получения описания авто необходимо вызвать скрипт что-то вроде этого:
$(document).ready(function () {
    $("#linkCarInfo").click(function () {
        var id = $(this).data("num");
        Car.getCarInfo(id);
    });
});

Car = {
    getCarInfo: function (id) {
        $.ajax({
            dataType: "Json",
            contentType: "application/json; charset=utf-8",
            asynch: false,
            url: "/Home/CarInfo/" + id,
            success: function (output, status, xhr) {
                var car = eval(output);
                Car.viewCarInfo(car);
            },
            error: function (error) {
                alert("Error: " + error);
            }
        });
    },

    viewCarInfo: function (car) {
        var result = "Модель: " + car.model + "<br/>";
        result += "Максимальная скорость: " + car.maxSpeed + "<br/>";
        result += "Разгон до 100 км/ч за" + car.acceleration + " сек<br/>";
        
        document.getElementById("carInfo").innerHTML = result;
    }
}


В итоге работает только при нажатии на первую ссылку. При нажатии на последующие ноль реакции. Изучаю ASP.net MVC и по JQuery знаний пока мало (как и по JS):) .

Сам(и) вопрос(ы):
Как правильно делать обработку таких ссылок или как их генерировать, чтоб потом под один обработчик запихнуть и считывать там только ID. Конечно интересно решение ненавязчивого JS, без подвески аттрибута onclick или вызова функции JS в ссылке.

dd_smol 19.06.2015 22:15

id – на страницы должен быть уникальным. Судя же по вашему коду, приведённому выше, он выводится несколько раз в цикле, а jQuery обработчик события назначает только одному вывод id заменить на class назначить обработчик события через метод each.
@foreach (var item in Model) {
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.PetName)
        </td>
        <td>
            <a href="#" class="linkCarInfo" data-num=@item.Id>Описание</a>
        </td>
    </tr>
}


$(document).ready(function () {
    $(".linkCarInfo").each(function() {
		$(this).click(function () {
			Car.getCarInfo($(this).data("num"));
		});	
	});
});

dd_smol 19.06.2015 22:50

Так на мой взгляд более симпатично смотрится.:)
jQuery(function($) {
	var getCarInfo = function(id) {
		if ( !id ) return;
		$.getJSON('/Home/CarInfo/' + id, function(data) {
			$('#carInfo').html(
				"Модель: " + data.model + "<br/>" +
				"Максимальная скорость: " + data.maxSpeed + "<br/>" +
				"Разгон до 100 км/ч за" + data.acceleration + " сек<br/>"
			);
		});
	};
	
	$('.linkCarInfo').each(function() {
		$(this).click(function() {
			getCarInfo( $(this).data('num') );
		});
	});
});

Neiro 23.06.2015 11:24

Спасибо. Заработало :dance:
Догадывался, то что из-за уникальности id на странице не работает, но как исправить не знал:)


Часовой пояс GMT +3, время: 03:18.