2014-10-04 5 views
-1

У меня есть таблица html, и это содержимое создано с помощью ajax И у меня есть кнопка, которая добавляет строку в начале таблицы Но JQuery не знает о содержимом ajax и добавляет строку только после того, какJQuery ignore html, созданный с помощью ajax

$("#add-row-first").on("click", addrowfirst); 
function addrowfirst(){ 
    $("#table").prepend("<tr><td>1</td><td>cell</td><td>cell</td><td>cell</td></tr>"); 
} 

Аякса

function genTable(){ 
    $.ajax({ 
     type: "POST", 
     dataType: "html", 
     url: "inc/gen-table.php", 
     success: function(data){ 
      $("#table").html(data); 
     } 
    }); 
} 

HTML

<button id="add-row-first">create row</button> 
<table id="table"></table> 

РЕШЕНИЕ Таким образом, решение было очень простым. My ajax reqest return string "<tr><td>some text</td></tr>". Так что нет тега <tbody> и код вставки вставки в тег тега, который не существует. И он автоматически создает его после создания ajax-кода. Таким образом, ваш Ajax должен вернуть <tbody><tr><td>some text</td></td></tdbody>

+1

'$ (" # add-row-first "). On (" click ", addrowfirst);' – melancia

+4

Вы уверены, что данные ajax фактически добавляются в тег '

'? Не могли бы вы разместить код, который добавляет содержимое ajax в таблицу? – AlliterativeAlice

+2

очень сложно сказать вам решение, не зная, что делает ваш вызов ajax. –

ответ

-2

простейшего решения этого дела может быть

var data = "<tr><td>1</td><td>cell</td><td>cell</td><td>cell</td></tr>"; 
$('#table').html(data + $('#table').html()); 
+0

Вы попробовали свое предложение? Предполагая, что '# table' ссылается на тег' table', тогда '.html()' возвращает что-то вроде '

...' в конкатенации с 'data' приведет к' .... ... 'и это неверно, и причина того, что' table' станет пустым. –

0

если элемент #add-row-first создан после того, как документ создан, вы не можете использовать его таким образом. Вы можете использовать .on() с другим параметром, так что будет найти элемент, как это вместо

$("#table").on("click", "#add-row-first",addrowfirst); 

Если я понять Ваш вопрос правильно, это должно сделать это. documentation немного сложно переварить, но в основном первый элемент #table должен существовать во время загрузки документа, а элемент #add-row-first может быть добавлен в DOM позже, если он является дочерним элементом #table jQuery знает, как его найти.

+2

Это была моя первая мысль, но формулировка вопроса подразумевает, что она фактически добавляет строку, просто не в правильном положении. Постскриптум Эта вещь, которую вы пытаетесь описать, - это делегированный обработчик событий * :) –

+0

Я не уверен, я думаю, что весь элемент '# table' может быть загружен после создания DOM. Также использование этой терминологии не облегчает понимание. Спасибо за правильное техническое имя. :) – Bryan

+1

Пока кнопка 'add-row-first'exists, тогда она должна работать. Есть руда, идущая одна, чем они показывают :) –

Смежные вопросы