Есть js код, который добавляет плюс-минус к выбору количества. если в товаре присутствую атрибуты, то при их смене скрипт слетает и количество отображается как стандартный инпут. Подскажите как в данной конкретном случае устранить конфликт с аяксом при смене атрибутов? Пробовала разные варианты - пока не помогло
"use strict";
/* -------------------------------------------------------------------------
QUANTITY INPUT
------------------------------------------------------------------------- */
$.fn.lvQuantityInput = function(){
var $this = $(this),
input = $this.find( 'input' ),
value = parseInt( input.val() ),
minValue = input.prop( 'min' ) ? parseInt( input.prop( 'min' ) ) : 0,
maxValue = input.prop( 'max' ) ? parseInt( input.prop( 'max' ) ) : 100,
step = input.prop( 'step' ) ? parseInt( input.prop( 'step' ) ) : 1;
// CREATE ELEMENTS
input.hide();
$this.append( '<div class="quantity"><input class="minus" type="button" value="-"><input class="input-text qty text fake-input" type="text" name="quantity" value="' + value + '" title="Quantity " size="4"><input class="plus" type="button" value="+"></div>' );
var plus = $this.find( '.plus' ),
minus = $this.find( '.minus' ),
fakeInput = $this.find( '.fake-input' );
// ACTIONS
minus.click(function(){
if ( ( value - step ) >= minValue ) {
value -= step;
fakeInput.val( value );
fakeInput.trigger( 'change' );
}
});
plus.click(function(){
if ( ( value + step ) <= maxValue ) {
value += step;
fakeInput.val( value );
fakeInput.trigger( 'change' );
}
});
fakeInput.change(function(){
if ( ! isNaN( fakeInput.val() ) ) {
value = parseInt( fakeInput.val() );
input.val( value );
}
});
};
$(document).ready(function(){
if ($('.content-flickr').length) {
$('.content-flickr').jflickrfeed({
limit: Drupal.settings.flick.flick_setting_numberphoto,
qstrings: {
id: Drupal.settings.flick.flick_setting_id
},
itemTemplate: '<li><a title="{{title}}" href="{{image}}"><img src="{{image_s}}" alt="{{title}}" width="75" height="75"></a></li>'
});
}
// QUANTITY INPUTS
if ( $.fn.lvQuantityInput ) {
$( '.form-item-quantity' ).each(function(){
$(this).lvQuantityInput();
});
$( '#views-form-commerce-cart-form-default .views-field-edit-quantity .form-item' ).each(function(){
$(this).lvQuantityInput();
});
}
})(jQuery);
//
Комментарии
Когда срабатывает аякс событие друпала, вызывается Drupal.attachBehaviors, соответственно, код по присоединению плагина к инпуту нужно разместить внутри Вашего "поведения", а так же позаботиться о том, чтобы этот код не срабатывал по 100500 раз при любом аякс запросе на одних и тех же элементах, тут Вам может помочь once. Словом, погуглите сперва "drupal behaviors", а затем "drupal jquery once", информации там было много на эту тему
PS Когда пишете jQuery плагин, старайтесь each размещать внутри самого плагина, а иначе получается ерунда.