Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 14.01.2011, 23:37
Интересующийся
Отправить личное сообщение для javascript Посмотреть профиль Найти все сообщения от javascript
 
Регистрация: 31.01.2010
Сообщений: 11

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.
Ответить с цитированием
  #2 (permalink)  
Старый 15.01.2011, 15:49
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

что выдает console.log([confirmDel, typeof confirmDel]) ?
Ответить с цитированием
  #3 (permalink)  
Старый 18.01.2011, 08:55
Интересующийся
Отправить личное сообщение для javascript Посмотреть профиль Найти все сообщения от javascript
 
Регистрация: 31.01.2010
Сообщений: 11

если поставить сразу после if (confirmDel == true), то
[true, "boolean"]
если после $(".delete").click(function(){delete_row("ajax_pr_ delete"); , то
confirmDel is not defined
Ответить с цитированием
  #4 (permalink)  
Старый 18.01.2011, 10:07
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

на вкладке Сеть firebug'а ajax-запрос отправляется? В консоли firebug'а появляются ошибки?
Ответить с цитированием
  #5 (permalink)  
Старый 29.01.2011, 01:17
Интересующийся
Отправить личное сообщение для javascript Посмотреть профиль Найти все сообщения от javascript
 
Регистрация: 31.01.2010
Сообщений: 11

Проблему решил, нужно было в 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 внутри функции не имеет никакого значения.....вообщем если не правильно понял то плз поправьте....ну а главное что все работает как надо )
Ответить с цитированием
  #6 (permalink)  
Старый 29.01.2011, 02:03
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

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);
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не работает jQuery меню с AJAX eugene1986 jQuery 0 08.07.2010 18:49
Как установить кодировку при записи в MySQL Arfey Общие вопросы Javascript 6 14.06.2010 18:00
Ajax разбор метода mycoding jQuery 14 21.05.2010 10:57
Проблема с AJAX запросом + mod_rewrite BrokenEye AJAX и COMET 1 12.07.2009 02:08
Объясните как вызывается ajax скрипт AddressBook из формы prog90 AJAX и COMET 3 06.06.2009 16:12