Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   $(this).remove() не работает на форме с ajaxForm() (https://javascript.ru/forum/jquery/39742-%24-remove-ne-rabotaet-na-forme-s-ajaxform.html)

gait 10.07.2013 10:49

$(this).remove() не работает на форме с ajaxForm()
 
Я хочу, чтобы по сабмиту форма самоудалилась. Но это нужно сделать
при срабатывании ajaxForm:

<form class="test-form">
	<button class="test-button">SUBMIT</button>
</form>

$(".test-form").ajaxForm(function() {
	$(this).remove();
});

И почему-то не получается.

Можно сделать так:
$(".test-button").on('click', function() {
	$(this).parent().remove();            
});


Но этот вариант не подходит, нужно сделать удаление именно с ajaxForm.

Еще можно сделать так:
$(".test-form").ajaxForm(function() {
	$(".test-form").remove();
});

И тогда тоже всё пучком, но у меня много форм и мне нужно удалять только ту, где произошел сабмит, то есть нужен $(this), но с ним почему-то удаления формы не происходит?

skrudjmakdak 10.07.2013 10:57

а что в консоль падает, ошибок нет?
$(".test-form").ajaxForm(function() {
console.log(this);
    $(this).remove();
});

gait 10.07.2013 11:01

ошибок нет, в консоли:
[Object, jquery: "2.0.3", constructor: function, init: function, selector: "", toArray: function…]

gait 10.07.2013 11:03

а, это было для console.log($(this));
для console.log(this) выдает вот это:
Object {url: "http://localhost:8080/fileupload/", type: "POST", isLocal: false, global: true, processData: true…}

animhotep 10.07.2013 11:04

$('.test-form').submit(function() {
  $(this).remove();
  return false;
});

gait 10.07.2013 11:06

Цитата:

Сообщение от animhotep (Сообщение 261510)
$('.test-form').submit(function() {
  $(this).remove();
  return false;
});

Ничего не изменилось :-?

skrudjmakdak 10.07.2013 11:07

ну а если так:
$(".test-form").ajaxForm(function() {
      $(".test-form").remove();
});

animhotep 10.07.2013 11:08

я может не понял чё вам нужно, но формы по клику удаляются
http://codepen.io/anon/pen/pwaLu

gait 10.07.2013 11:08

Цитата:

Сообщение от skrudjmakdak (Сообщение 261514)
ну а если так:
$(".test-form").ajaxForm(function() {
      $(".test-form").remove();
});

Так получается, я об этом писал выше, но мне нужен $(this)

skrudjmakdak 10.07.2013 11:08

мм. па попробуйте в консоль вот так вывести:
$(".test-form").ajaxForm(function() {
console.log($(this)[0]);
});

по идеи должен вернуть dom элемент

gait 10.07.2013 11:22

Цитата:

Сообщение от animhotep (Сообщение 261515)
я может не понял чё вам нужно, но формы по клику удаляются
http://codepen.io/anon/pen/pwaLu

Не по сабмиту, а по ajaxForm (нужно использовать jquery.form.js)

gait 10.07.2013 11:24

Цитата:

Сообщение от skrudjmakdak (Сообщение 261517)
мм. па попробуйте в консоль вот так вывести:
$(".test-form").ajaxForm(function() {
console.log($(this)[0]);
});

по идеи должен вернуть dom элемент

Object {url: "http://localhost:8080/fileupload/", type: "POST", isLocal: false, global: true, processData: true…}
accepts: Object
async: true
contentType: "application/x-www-form-urlencoded; charset=UTF-8"
contents: Object
converters: Object
crossDomain: false
data: ""
dataTypes: Array[2]
flatOptions: Object
global: true
hasContent: true
iframeSrc: "about:blank"
isLocal: false
jsonp: "callback"
jsonpCallback: function () {
processData: true
responseFields: Object
success: function (data, status, xhr) { // jQuery 1.4+ passes xhr as 3rd arg
type: "POST"
url: "http://localhost:8080/fileupload/"
xhr: function () {
__proto__: Object

То есть выводит тоже, что и при console.log(this);
То есть в случае с ajaxForm (this) == $(this) ?? И как мне тогда выцепить форму, в которой произошел сабмит?

skrudjmakdak 10.07.2013 11:27

аа. он вам не dom возвращает, а аякс объект скорей, поэтому и косяк.
тогда замыканием можно сделать

animhotep 10.07.2013 11:28

Цитата:

Сообщение от gait
Я хочу, чтобы по сабмиту форма самоудалилась.

Цитата:

Сообщение от gait
Не по сабмиту, а по ajaxForm

еммм

skrudjmakdak 10.07.2013 11:28

var test-form = $(".test-form");

$(test-form).ajaxForm(function(ths) {
  return function(){
    console.log(ths);
  }
}(test-form));

gait 10.07.2013 11:33

Цитата:

Сообщение от animhotep (Сообщение 261522)
еммм

ajaxForm срабатывает при сабмите. Корректнее с моей стороны было бы сказать, что не просто при сабмите, а при сабмите с обработчиком ajaxForm, я извиняюсь, что ввел в заблуждение.

gait 10.07.2013 11:35

Цитата:

Сообщение от skrudjmakdak (Сообщение 261523)
var test-form = $(".test-form");

$(test-form).ajaxForm(function(ths) {
  return function(){
    console.log(ths);
  }
}(test-form));

Да, всё получилось! Спасибо! Сам бы реально не додумался...Еще раз спасибо!

animhotep 10.07.2013 11:35

ну это плагин и хз что конкретно он там возвращает
дайте id-шники формам и удаляйте по ним

gait 10.07.2013 12:18

Н-да, походу радость была не долгой. Код с замыканием удаляет все формы, а не ту, где произошел submit :(
var testForm = $(".test-form");  
$(testForm).ajaxForm(function(frm) {
  return function(){             
	  frm.remove();              
  }                              
}(testForm));


Цитата:

Сообщение от animhotep (Сообщение 261528)
ну это плагин и хз что конкретно он там возвращает
дайте id-шники формам и удаляйте по ним

А если у меня этих форм под ~50? Каждой давать id и на каждую вешать обработчик? Если выхода нет и с $(this) ничего не придумать, то так и сделаю, только потому что больше вариантов нет, но это очень некрасиво, долго и я чую, что такой подход неправильный

skrudjmakdak 10.07.2013 13:37

я честно с таким плагином не сталкивался, но может он какие то параметры передает в функцию?
var testForm = $(".test-form");  
$(testForm).ajaxForm(function(p1, p2, p3)
{  
 console.log(p1);
 console.log(p2);
 console.log(p3);
});

skrudjmakdak 10.07.2013 13:53

проверил сам лично, работает!!!
$(".form").each(function(index, obj)
	{console.log(obj)
	$(obj).ajaxForm(function(obj)
		{
		return function ()
			{
			$(obj).remove();
			}
		}(obj));
	});

gait 10.07.2013 13:54

Цитата:

Сообщение от skrudjmakdak (Сообщение 261554)
я честно с таким плагином не сталкивался, но может он какие то параметры передает в функцию?
var testForm = $(".test-form");  
$(testForm).ajaxForm(function(p1, p2, p3)
{  
 console.log(p1);
 console.log(p2);
 console.log(p3);
});

Никаких параметров не передает :( В некоторых функциях есть параметры
uploadProgress : function(event, position, total, percentComplete)
даже есть параметр $form, это не элемент формы, а непонятно вообще что, короче я в тупике :-E

skrudjmakdak 10.07.2013 13:55

смотрите этот ответ:

http://javascript.ru/forum/jquery/39...tml#post261556

gait 10.07.2013 14:02

Цитата:

Сообщение от skrudjmakdak (Сообщение 261556)
проверил сам лично, работает!!!
$(".form").each(function(index, obj)
	{console.log(obj)
	$(obj).ajaxForm(function(obj)
		{
		return function ()
			{
			$(obj).remove();
			}
		}(obj));
	});

Мужик!! Просто супер пупер мега респект тебе!! Как вы уже поняли, я полный ноль в js и не догадался вариант с замыканием запихнуть в each! Блин, надо срочно учить js! Еще раз Big thanks skrudjmakdak!!!

skrudjmakdak 10.07.2013 14:03

та лан, все когда то нулями были..


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