今天我检查了我的网站是否有错误,我在Firebug控制台中得到了这个:
TypeError:$(...)。live不是函数
代码
$('#payment-address select[name=\'customer_group_id\']').live('change', function() {
......... SOME PHP CODE ....
});
我已阅读this,解决方法是使用on()。 但问题是我不知道javascript / jquery。
有人能帮助我吗?
答案 0 :(得分:4)
.on() 的语法是:
.on( events [, selector ] [, data ], handler(eventObject) )
所以你可以这样做:
$('body').on('change', "#payment-address select[name=\'customer_group_id\']" , function() {
......... SOME PHP CODE ....
});
答案 1 :(得分:2)
使用.on()
语法
$( elements ).on( events, selector, data, handler );
$(document).on('change', "#payment-address select[name=\'customer_group_id\']" , function() {
//code here
});
$('parentElementPresesntAtDOMready').on('click',"#payment-address select[name=\'customer_group_id\']",function(){
// code here
});
答案 2 :(得分:0)
试试这个:
$('#payment-address').on('change',"select[name=\'customer_group_id\']" function() {
//code here
});
答案 3 :(得分:0)
$('#payment-address').on('change', 'select[name=\'customer_group_id\']', function() {
......... SOME PHP CODE ....
})
这称为事件委托。通过这种方式,事件由付款地址处理(因为所有事件都在DOM树中冒泡),当付款地址处理事件时,它会再次检查提供的选择器的来源。因此,您可以使用不同的选择器进行不同的回调。
通常事件以这种方式附着在身体上,因为身体总是存在,所有事件最终都会冒泡到身体
答案 4 :(得分:0)
要更改为开启,您需要了解其工作原理。
事件通过DOM树冒泡。如果您点击一个锚点,该事件也会传递给直接父级,父级父级,父级等。这将一直传递到文档
其他答案给了你如何更换它们的方法,但我想念这个:
你可以控制它让它冒泡的程度:
$('#wrapper_of_item').on('click', '.item', function);
这将阻止冒泡超过#wrapper_of_item
,从而节省一些资源。
为了完成答案,最基本的转换为on()
将是
// From
$('.elem1').live('click', someFunction);
$('.elem2').live('click', someFunction);
// To:
$(document).ready(function(){
// Direct conversion:
$('.elem1').on('click', someFunction);
$('.elem2').on('click', someFunction);
// Or a bit better:
$('#item1s_closest_wrapper_with_id').on('click', '.elem1', someFunction);
$('#item2s_closest_wrapper_with_id').on('click', '.elem2', someFunction);
});