我正在开发一个包含大量JS模块的大型应用程序。在其中一个中使用了这个代码:
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并不总是在文档就绪时可用(它是从ajax请求生成并缓存的,因此它在缓存时有效 - 因为它在stert上可用,但是当不可用时缓存 - 因为我必须等待几秒钟的ajax响应。
有没有办法调试这个并找到原因为什么更改事件不能正确传播?
代码中可能存在一些拼写错误,因为我在这里正确地写它(现在无法访问oryginal代码)。
selectorSlider以这种方式定义:
var selectorSlider = '[name="Filter[TravelTime][Selected]"], [name="Filter[FlightTime][Selected]"]';
答案 0 :(得分: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');
});
答案 1 :(得分:0)
试试这个:
$(selectorAvailableHolder).on('change', selectorSlider, function(){...}
祝你好运!!