т.е. 7 не запускающихся событий на динамически генерируемой разметке - PullRequest
1 голос
/ 27 февраля 2012

Есть некоторые решенные проблемы, но хочу спросить, может быть, вот другое решение. Здесь ситуация. Получил страницу aspx. С некоторым кодом за функциями, которые получают данные из БД. Вызванные функции и данные возвращаются через JQ в таблицу. Данные, подготовленные сервером в математическом формате HTML.

$.ajax({
            type: "POST",
            url: "somePage.aspx/foo",
            data: "{ 'Id' : '" + ID + "'}",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function(msg) {
                $("#brandTable").html(msg.d);
            }

Каждая возвращаемая строка выглядит так (как есть):

<tr btcsId='152' id='btcsId_152' onclick='brandClick(9,24,152)'>
<td class='DataGridItem' style='padding:3px; margin:0;font-weight:bolder;'>something<input type='hidden' id='brandID_btcsId152' value='24' brandName='something'/></td>
</tr>

таблица разметки:

<table class="DataGrid" id="brandTable" style="padding: 0px; margin: 0px; width:100%;border-collapse:collapse;table-layout:fixed;word-wrap:break-word;" border = "0" cellspacing="0" cellpadding="0">
    </table>

Итак, проблема была в том, что событие onclick не сработало только в ie7. ie8, ie9 работает нормально. После некоторых размышлений я решил добавить этот код сразу после заполнения таблицы. Другими словами, событие перезапуска для каждой строки.

$("[id^='btcsId_']").each(function () {
    $(this).click(function () {
    var thisID = $(this).attr("id");
    brandClick(specialityID,$("#"+thisID +" > TD > INPUT").val(),$(this).attr("btcsId"));
    });
});

После этого, кажется, работает нормально. Но правильно ли это? Может быть, есть какой-то другой способ?

Ответы [ 2 ]

1 голос
/ 27 февраля 2012

Чтобы получить делегирование вашей таблице Element, обработка этих событий: это работает также для элементов, используя делегат () или on () (jQuery> 1.7). которые добавлены динамически

$("table#idofYourTable").on("click", "[id^='btcsId_']", function () {
    var thisID = this.id;
    brandClick(specialityID,$("#"+thisID +" > TD > INPUT").val(),$(this).attr("btcsId"));

});
1 голос
/ 27 февраля 2012

нет, это не правильно. Вы не можете связать Нажмите на элемент будущего.

Либо вы пишете подпись onclick + выполнение в элементе - либо связываете ее с Live / on (новее)

$("[id^='btcsId_']").each(function () {
    $(this).live(function () {
    var thisID = $(this).attr("id");
    brandClick(specialityID,$("#"+thisID +" > TD > INPUT").val(),$(this).attr("btcsId"));
    });
});

пожалуйста, рассмотрите возможность использования On вместо live.

(> 1,7)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...