Tak więc używam Jquery mobile z wielkim sukcesem, z wyjątkiem jednego problemu. Teraz za każdym razem, gdy użytkownik przegląda dynamiczną stronę z treścią, niezależnie od zawartości, zawsze jest przycisk u dołu, który po kliknięciu wysyła treść pod wskazany adres; działa świetnie. Po pierwszym załadowaniu strony kliknięcie powoduje jednorazowe uruchomienie zdarzenia. Podczas drugiej wizyty odpalono ją dwa razy, trzeci 3 razy itd. Dostajesz punkt. Przeszukałem sieć i zaimplementowałem każdą poprawkę, na jaką mogłem natknąć się, np. Używając "strony" zamiast "pageinit", wiążąc, rozłączając, usuwając div, wyłączając buforowanie w DOM, ale nic nie działa. Jedynym sukcesem, jaki udało mi się uzyskać, jest użycie kliknięcia .one()
, ale po ponownym kliknięciu musi zostać uruchomiony. Oto struktura. Muszę .js
pliki, które ładują się z tym każdy, aby rozpocząćJquery mobile .click wypalanie wiele razy na nowej stronie wizyta
$("#page").live("pageinit", function() {
Teraz miałem z funkcji e-mail i inne rzeczy w jednym pliku, ale to sprawia, że łatwiej jest je rozdzielić i słyszałem to nie ma znaczenia. Teraz tutaj jest funkcja o nazwie e-mail w pageinit
$('.eb').live('click', function() {
var id = $('.eb').attr('id');
var to = $('#recipient').val();
var message = $('#email').html();
var atpos = to.indexOf("@");
var dotpos = to.lastIndexOf(".");
if (atpos < 1 || dotpos < atpos + 2 || dotpos + 2 >= to.length) {
alert('Please enter a valid email address!');
return false;
}
if(to.length == 0) {
alert('Please enter a valid email address!');
return false;
}
$.mobile.showPageLoadingMsg();
$.post('./services/service.email.php', { id: id, to: to, message: message}, function(data) {
if(data.success == true) {
$.mobile.hidePageLoadingMsg();
alert('Your recipe has been sent!');
$('#recipient').val('');
return true;
}
if(data.success == false) {
if(data.fail == 1) {
alert('An error has occured sending your recipe. Try again soon!');
return false;
}
if(data.fail == 2) {
alert('Please enter a valid email address!');
}
}
}, 'json');
return false;
});
wszystko działa bez zarzutu z wyjątkiem bieżących wypalania .click
na każdej nowej stronie. Czy ktoś może mnie poprowadzić we właściwym kierunku?
Ten proces pozostawia za sobą wszystkie rodzaje powiązań zdarzeń, które nie są konieczne (im dalej użytkownicy zobaczą, tym wolniej będzie działać, ponieważ właśnie ładujesz coraz więcej delegowanych procedur obsługi zdarzeń, które muszą być sprawdzane za każdym razem, gdy zdarzenie bąbelkuje DOM). Twój problem polegał na regularnej pułapce pracy z dynamiczną treścią, a Ty byłeś zbyt liberalny ze swoimi powiązaniami z wydarzeniami. Prawdziwą poprawką jest zaprzestanie używania delegowanych procedur obsługi zdarzeń tam, gdzie nie są one konieczne. Cieszę się, że coś wymyśliłeś, ale to nie jest dobra odpowiedź. – Jasper