Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 19.06.2015, 21:58
Аватар для Belka
Новичок на форуме
Отправить личное сообщение для Belka Посмотреть профиль Найти все сообщения от Belka
 
Регистрация: 31.10.2013
Сообщений: 7

jQuery - Конфликт функций при отправке формы по ajax
Здравствуйте.
Суть в чем. JS знаю не очень хорошо, но пришлось допиливать стандартный компонент битрикса Киоск(интернет-магазин и в корзине должны быть кнопочки и поле для изменения количества товара) . Изначально он работал так, что при каждом нажатии отрабатывал сабмит формы через js и страница перезагружалась (нажал + и страница перегрузилась).

$.post('/account/cart/', $('#basket_form').serialize(), function(data){
 
    var newSumm = $(data).find(id).parent().parent().find('.summ').html();
    $(id).parent().parent().find('.summ').html(newSumm);
    var allSumm = $(data).find('#itog').html();
    $('#itog').html(allSumm);
    delete data;
 
    });


Для кнопок + и - отрабатывают отдельные функции. Сами по себе каждая из них работает, ошибок нет.

Но, например, если сначала поменять число в поле (инпуте), то после этого кнопки +,- уже не работают.

Сначала и наоборот не работало - после кнопок с первого раза не срабатывало изменение в поле (менялось только со второго раза)

Тогда я попробовала удалять каждый раз данные в функции. Проблему с изменением поля после нажатия кнопок это решило, вроде, а вот нажатие кнопок после изменения поля до сих пор не работает.

Не знаю что уже делать.. Помогите пожалуйста, кто знает как с этим справиться.


Вот js обработчик этой корзины.
$(function(){
var tabContainers = $('div.ys_tv_tab');
var initialCost = $('#itog').text().replace(/\D+/,'');
//console.log(initialCost); 
tabContainers.hide().filter(':first').show();
$('.ys_tab_nav a').click(function () {
tabContainers.hide().filter(this.hash).show();
//$('.ys_tab_nav a').removeClass('ys_active');
$(this).parent().parent().find("a").removeClass('ys_active');
$(this).addClass('ys_active');
$(this).parent().find('input').attr("checked", "checked"); 
$('.ys_tab_nav a[href='+$(this).attr("href")+']').addClass('ys_active');
 
setDelivery(initialCost);
 
return false;
});
 
setDelivery(initialCost);
 
$('td.ys-ibcount input[type=text]').on('change', function(){
$('#order').attr('name', 'no_order');
$('#calculate').attr('name', 'calculate');
$('#BasketRefresh').attr('value', 'Y');
 
 
var ids = '#'+$(this).attr('id');
            console.log(ids);
                $.post('/account/cart/', $('#basket_form').serialize(), function(data){
 
                    var newSumm = $(data).find(ids).parent().parent().find('.summ').html();
                    $(ids).parent().parent().find('.summ').html(newSumm);
                    var allSumm = $(data).find('#itog').html();
                    $('#itog').html(allSumm);
                    delete data;
                
                
                })
 
});
});
 
function setDelivery(initialCost)
{
var activeButton = $('a.ys_active');
if(activeButton.find("[name = 'PROPERTY[DELIVERY_E]']").attr('placeholder')>0)
{
$('.ys-delivery').show();
if(/\d+/.test($('.ys-delivery').find("strong").text()))
{ 
var newDeliveryCost = $('.ys-delivery').find("strong").html().replace(/\d+/, activeButton.find("[name = 'PROPERTY[DELIVERY_E]']").attr('placeholder'));
$('.ys-delivery').find("strong").replaceWith('<strong>'+newDeliveryCost+'</strong>');
 
var newCost = $('#itog').html().replace(/\d+/, parseFloat(initialCost,10) + parseFloat(activeButton.find("[name = 'PROPERTY[DELIVERY_E]']").attr('placeholder'),10));
$('#itog').replaceWith(newCost);
}
}
else
{
$('.ys-delivery').hide();
 
var newCost = $('#itog').html().replace(/\d+/, initialCost);
$('#itog').replaceWith(newCost);
 
}
}
 
function setQuantity(id, operation){
var q = $(id).attr('value');
if(operation == '-' && q > 10)
q = Number(q)-10;
if(operation == '+' )
q = Number(q)+10; 
$(id).attr('value', q);
$('#BasketRefresh').attr('value', 'Y');
 
$.post('/account/cart/', $('#basket_form').serialize(), function(data){
 
    var newSumm = $(data).find(id).parent().parent().find('.summ').html();
    $(id).parent().parent().find('.summ').html(newSumm);
    var allSumm = $(data).find('#itog').html();
    $('#itog').html(allSumm);
    delete data;
 
    });
}


Если нужен сам сайт для полного понимания, то masterplast12.dev.lptsystem.net/account/cart/ - толкьо сначала что-нибудь в корзину добавить надо


Заранее спасибо.
Ответить с цитированием
  #2 (permalink)  
Старый 20.06.2015, 00:48
Аватар для Vlasenko Fedor
Профессор
Отправить личное сообщение для Vlasenko Fedor Посмотреть профиль Найти все сообщения от Vlasenko Fedor
 
Регистрация: 13.03.2013
Сообщений: 1,572

var newSumm = $(data).find(id).parent().parent().find('.summ').html();

этот код не рабочий так как id здесь не определенно
Ответить с цитированием
  #3 (permalink)  
Старый 20.06.2015, 01:35
Аватар для Belka
Новичок на форуме
Отправить личное сообщение для Belka Посмотреть профиль Найти все сообщения от Belka
 
Регистрация: 31.10.2013
Сообщений: 7

Сообщение от Poznakomlus Посмотреть сообщение
var newSumm = $(data).find(id).parent().parent().find('.summ').html();

этот код не рабочий так как id здесь не определенно
он рабочий. так как id передается в виде первого параметра функции при вызове (событие и вызов висит непосредственно на самой кнопке)
<button onclick="$('#order').attr('name', 'no_order'); $('#calculate').attr('name', 'calculate'); setQuantity('#QUANTITY_0', '+'); return false;" class="button4">+</button>

Более того, он работает до прямого введения в инпут
Ответить с цитированием
  #4 (permalink)  
Старый 20.06.2015, 01:37
Аватар для Belka
Новичок на форуме
Отправить личное сообщение для Belka Посмотреть профиль Найти все сообщения от Belka
 
Регистрация: 31.10.2013
Сообщений: 7

сейчас заметила, что при внесении вручную данных в поле - value не изменяется (но отправляется на сервер), а если после того, как вручную изменил данные нажимать на кнопки, то значение value меняется (а в поле не происходит изменений), пост по ajax на сервер отправляется, но отправляется без изменений (из того, что выведено на экран в инпуте, а не из атрибута value)
Ответить с цитированием
  #5 (permalink)  
Старый 20.06.2015, 02:14
Аватар для Belka
Новичок на форуме
Отправить личное сообщение для Belka Посмотреть профиль Найти все сообщения от Belka
 
Регистрация: 31.10.2013
Сообщений: 7

Все, тему можно закрыть.. сама нашла (озарило в 2 часа ночи))))) )
добавила 3 строчки и все заработало

$(id).val(q);

и
var w = $('td.ys-ibcount input[type=text]').val();

$(ids).attr('value', w);
Ответить с цитированием
  #6 (permalink)  
Старый 20.06.2015, 02:15
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

<!DOCTYPE>
<html>
<head>
<script src="http://code.jquery.com/jquery-latest.js"></script>
<script>
$(document).ready(function(){
   $("#sub").click(function(){
      var outValue = $(this).parents('form').serialize();
      alert(outValue); //Тут вместо alert() отправка Аяксом
   });
});
</script>
</head>
<body>

<form>
     <input name=fld1 value=0><br>
     <input name=fld2 value=0><br>
     <input name=fld3 value=0> 
     <input id="sub"  type=button value="Cчитать введённые данные"><br>
</form>

</body>
</html>
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перестает работать галерея при загрузке через Ajax (Need help) Clodan jQuery 0 20.04.2015 20:18
Не понятна работа при отправке формы на валидацию bartonom AJAX и COMET 5 14.05.2013 21:18
Конфликт Ajax и jQuery MadChild Javascript под браузер 2 22.10.2012 18:30
Скрыть iframe - транспорт при отправке формы. Kotakota AJAX и COMET 2 30.08.2011 10:43
Конфликт AJAX и Jquery Кирюха =) AJAX и COMET 15 08.08.2011 13:36