AJAX удаление записи из БД
Господа эксперты, мне ошенамана нужна ваша помощь.
Задача собственно следующая, удалить записи из БД через ajax. код такой: $(document).ready(function(){ function delete_row(link) { var ajax_url = "/delete/" + link + "/"; alert(ajax_url); var confirmDel = confirm("Вы подтверждаете удаление?"); if (confirmDel == true) { alert($(this)); $(this).parents('TR').addClass('overlay'); $(this).parents('TR').parent().prepend('<div id="load" align="center"><img src="/img/loading.gif" width="28" height="28" align="absmiddle"> Обработка...</div>');; var commentContainer = $(this).parents('TR'); // получаем значение элемента var id = $(this).attr("id"); var string = 'id='+ id ; $.ajax({ type: "POST", // файл-обработчик url: ajax_url, data: string, cache: false, // сворачиваем строку на которую кликнули success: function(msg){ commentContainer.slideUp('slow', function() { $(this).remove(); }); $('#load').fadeOut(); alert(msg); } }); return false; } }; $(".delete").click( function() { //alert(this); delete_row("ajax_pr_delete"); } ); }); При клике на элементе порсле сообщения о подтверждение о удаление ничего не происходит. Все работает если содержимое функции delete_row вставить в обработчик click. |
что выдает console.log([confirmDel, typeof confirmDel]) ?
|
если поставить сразу после if (confirmDel == true), то
[true, "boolean"] если после $(".delete").click(function(){delete_row("ajax_pr_ delete"); , то confirmDel is not defined |
на вкладке Сеть firebug'а ajax-запрос отправляется? В консоли firebug'а появляются ошибки?
|
Проблему решил, нужно было в function delete_row(link) добавить аргумент , например selector - function delete_row(selector, link). И соответственно все $(this) заменить на $(selector).
Также заменить $(".delete").click( function(){delete_row("ajax_pr_delete"); } на $(".delete").click( function() { delete_row(this, "ajax_pr_delete"); } ); Как я понимаю, иначе(без аргумента selector) при вызове функции jquery не может отследить на каком элементе произошел клик и собстна тогда this внутри функции не имеет никакого значения.....вообщем если не правильно понял то плз поправьте....ну а главное что все работает как надо ) |
this в обработчике click - это DOM-элемент, на котором произошел клик мышью. Если ты его не передаешь в функцию delete_row, то, естественно, он сам туда не передастся, а получит контекст по умолчанию (window):
var obj = {}; function f1(){ alert( this === obj ); f2( this ); } function f2( arg ){ alert([ this === window, arg === obj ]); } f1.call(obj); вызвать функцию с тем же объектом в качестве this можно так var obj = {}; function f1(){ alert( this === obj ); f2.call( this ); } function f2(){ alert( this === obj ); } f1.call(obj); а можно просто упрощенно говоря "назначить" функции this Function.prototype.of = function( o ){ var f = this; return function(){ return f.apply(o, arguments); }; }; var obj = {}; function f1(){ alert( this === obj ); f2.of(this)(); f3( f2.of(this) ); } function f2(){ alert( this === obj ); } function f3( f ){ f(); } f1.call(obj); |
Часовой пояс GMT +3, время: 15:00. |