Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Как выбрать элемент, который отправлялся ajax (https://javascript.ru/forum/jquery/57774-kak-vybrat-ehlement-kotoryjj-otpravlyalsya-ajax.html)

Nifler 19.08.2015 11:24

Как выбрать элемент, который отправлялся ajax
 
задание следующее: есть таблица с инпутами. Возле каждого поля для записи есть кнопка для отправки. Когда менять текст в инпуте - он становится синим. При нажатии кнопки текст летит при помощи метода .get на сервер, там записывается в базу и если все сработало хорошо то эту строку нужно сделать черного цвета. Как определить какой именно инпут был отправлен?
Вот как выглядит табличка.
<table>         <tr>
                                <th>ID</th>
                                <th>Действие</th>
                                <th>Текст</th>
                                <th>Отправить</th>
                            </tr>
                            <tr>
                                <td>1</td>
                                <td>Успішна авторизація</td>
                                <td> <input type='text' name=1 value='Ви успішно авторизувалися!'></td>
                                <td><input type='submit' class='sub' value='Изменить'></td>
                            </tr>
            
                            <tr>
                                <td>2</td>
                                <td>Невірний пароль або мейл</td>
                                <td> <input type='text' name=2 value='Ви ввели невірний e-mail та/або пароль!'></td>
                                <td><input type='submit' class='sub' value='Изменить'></td>
                            </tr>
</table>

Вот как изменяю цвет на синий
$('input').keyup(function(){
            $(this).css("color","blue");
        })

а вот мой гет полетел
$(".alert-list input.sub").click(
            function(){
                var textInput = $(this).parent().prev().find('input').val();
                var id = $(this).parent().prev().prev().prev().text();
                var data = "id="+id+"&text="+textInput;
                $.get("modules/misc/alert_list.php", data, sendCallback,"json");
            }
        )

после этого в sendCallback возвращается true если все хорошо и false если не получилось записать.
Вот функция sendCallback
function sendCallback(data){
            if(data.res){
                alert('Тут нужно изменить цвет на черный.');
            }else{
                alert('Не получилось изменить это сообщение!');
            }
        }


Как достучаться к тому элементу с которого летел гет запрос? то есть вот к этому который был в гет запросе
var textInput = $(this).parent().prev().find('input').val();
Пытался сделать вот так:
var input = $(this).parent().prev().find('input');
а потом в sendCallback написать
input.css('color','black')
но не получилось, вероятно там что-то с зоной видимости.
Как можно это сделать?

laimas 20.08.2015 05:55

А почему не отправить сразу все поля формы и не заниматься "планеризмом"?

ksa 20.08.2015 08:25

Цитата:

Сообщение от Nifler
Как определить какой именно инпут был отправлен?

Как вариант...

$(".alert-list input.sub").click(function(){
	var obj = $(this).parent().prev().find('input');
	var textInput = obj.val();
	var id = $(this).parent().prev().prev().prev().text();
	var data = "id="+id+"&text="+textInput;
	$.get("modules/misc/alert_list.php", data, (function(Obj){
		return function(){
			// т.о. Obj будет доступен в функции sendCallback() как проносимая переменная
			sendCallback();
		};
	})(obj), "json");
});

Либо менять формат запроса и ответа...


Часовой пояс GMT +3, время: 13:50.