jQuery.on('更改')没有解雇

时间:2013-12-13 07:03:06

标签: jquery onchange

我正在开发一个包含大量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]"]';

2 个答案:

答案 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(){...}
祝你好运!!