Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   .submit не работает после .load (https://javascript.ru/forum/jquery/45950-submit-ne-rabotaet-posle-load.html)

kapustnik 22.03.2014 03:19

.submit не работает после .load
 
<script>
$(function(){
$('.setfilter').submit(function(e){
e.preventDefault();
var m_method=$(this).attr('method');
var m_action=$(this).attr('action');
var m_data=$(this).serialize();
$.ajax({
type: m_method,
url: '/sys/user/ajax/set-filter.php',
data: m_data,
success: function(result){
$('#setgruz').fadeOut('slow');
$('#settransport').fadeOut('slow');
$("#globalfilterdiv").load("/user/<?=$user_id?> #global-filter");
}
});
});
});
</script>



Данный кусок не работает после перезагрузки кода через .load
Кнопки через .on работают , а это - нет

В чем проблема ?

danik.js 22.03.2014 03:46

Цитата:

Сообщение от kapustnik
В чем проблема ?

В твоем непонимании javascript'а.

После .load на странице появляются новые элементы, у которых не установлено никаких обработчиков событий. Откуда бы им (обработчикам) взяться?
Выхода два:
1) После .load навешивать обработчики
2) Делегировать обработчики родителю, который заведомо всегда присутствует на странице. Делегат создается так:
$(parent).on('submit', '.setfilter', function(){})

Цитата:

Сообщение от kapustnik
var m_method=$(this).attr('method');
var m_action=$(this).attr('action');

Вот так и бывает когда лезут во всякие библиотеки, не изучив нативные API.
Зачем тебе метод attr, когда все доступно как this.method и this.action?
И такое именование не используется в JavaScript. Вроде в C++ так пишут.

kapustnik 22.03.2014 03:59

После .load навешивать обработчики
-----------------------
как после лоад навесить.

danik.js 22.03.2014 05:18

$.load('url', function(){
// тут навешиваем. элементы уже созданы из загруженного html
});

kapustnik 22.03.2014 14:47

В общем докопался до сути , почему то , при конструкции не важно .ON или .DELEGATE вида

$(document).on('click',"#showgruz",function(){
alert('работает'); 
 $('#setgruz').show(); 
});


Алерт работает всегда и везде , а вот более сложные события , show , fadein и т.п не срабатывают

Что за чертовщина ? Как так получается что 1 событие работает а второе нет

danik.js 23.03.2014 04:21

Цитата:

Сообщение от kapustnik
более сложные события , show , fadein

Каким боком это события?

danik.js 23.03.2014 04:24

<script src="http://code.jquery.com/jquery-latest.min.js"></script>
<script>
$(document).on('click',"#showgruz",function(){
alert('работает');
 $('#setgruz').show();
});
</script>
<button id="showgruz">showgruz</button>
<a id="setgruz" style="display:none">setgruz</a>


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