在.on中转换$(...)。live

时间:2014-04-14 16:19:32

标签: javascript jquery

今天我检查了我的网站是否有错误,我在Firebug控制台中得到了这个:

  

TypeError:$(...)。live不是函数

代码

 $('#payment-address select[name=\'customer_group_id\']').live('change', function() {
        ......... SOME PHP CODE ....
    });

我已阅读this,解决方法是使用on()。 但问题是我不知道javascript / jquery。

有人能帮助我吗?

5 个答案:

答案 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);

});