2013-12-13 2 views
0

Я работаю над большим приложением, в котором много JS-модулей. В одном из них используется этот код:jQuery.on ('change') not firing

var tinput = tmpl.find('[name="Filter[TravelTime][Selected]"]'); 
tinput.val(ui.value); 
tinput.trigger('change'); 

Он просто меняет значение скрытого ввода и состояния «изменения силы» на нем.

В другой части у меня есть эта простая функция:

$('body').on('change', selectorSlider, function(){ 
console.log('fired'); 
}); 

, что он должен сделать, это показать журнал, когда изменяется значение входного - но это не срабатывает. Я попытался также таким образом:

$(selectorAvailableHolder).find(selectorSlider).on('change', function(){...} 

Также нет успеха. Единственный способ сгореть случай является использование чистого .onchange:

$(selectorAvailableHolder).find(selectorSlider).get(0).onchange = function() {...} 

И это работает ... кроме одной проблемы - selectorSlider не всегда доступна на документе готов (генерируется из АЯКС запроса и кэшируются, поэтому он работает при кэшировании - поскольку он доступен прямо на stert, но не когда он не кэшируется - так как мне нужно ждать ответа ajax, который занимает несколько секунд).

Есть ли способ отладить это и найти причину, по которой событие изменения не распространяется правильно?

В коде могут быть какие-то опечатки, так как я нахожу его прямо здесь (без доступа к оригиналинному коду прямо сейчас).

selectorSlider определяется следующим образом:

var selectorSlider = '[name="Filter[TravelTime][Selected]"], [name="Filter[FlightTime][Selected]"]'; 
+0

что 'selectorSlider' здесь? объект, переменная, если селектор, то что это такое? –

+0

Я добавил информацию о selectorSlider на вопрос. –

ответ

1

Попробуйте это:

var tinput = tmpl.find('[name="Filter[TravelTime][Selected]"]'); 
tinput.val(ui.value); 
$('body').trigger('change:filter', [ tinput ]); 

на теле

$('body').on('change:filter', function(event, tinput){ 
    console.log(tinput, 'fired change'); 
}); 
+0

Это не сработает, так как вторая часть помещается в другой модуль, который не имеет ничего о переменных из первой части. –

+0

@MarcinBobowski, вы пробовали этот код? С 1-го триггера вы отправляете свой 'tinput' – Sergey

+0

. Я проверю его завтра. Вы предполагаете, что вторая часть tinput - это просто имя, и оно не требует, чтобы оно определялось первым? –

0

попробовать это:

$(selectorAvailableHolder).on('change', selectorSlider, function(){...} 

удачи !!

+0

Это было бы легко. Использование тела делает его более универсальным и защищенным от ошибок, поэтому использование более специфического селектора выиграет, т меняет что-либо. –