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, время: 02:41. |