jQuery .live()不使用click事件

时间:2011-04-04 18:43:25

标签: jquery ajax wordpress click live

我有一个ajax日历,它会在点击某些箭头时更改月份。出于某种原因,click事件在live()方法中不起作用。它曾经工作,但现在它不是出于某种原因。

如果我用click()替换live(),它可以工作,但我需要live()方法。

假设

  • 我使用的是最新版本的jQuery。
  • 没有抛出JS错误。
  • HTML有效
  • 找到了a.x-btn选择器(长度= 2)
  • console.log('得到这么远!')正确启动。
  • console.log('Sidebar Cal Clicked')而不是开除。
  • 在Wordpress环境中运行。
  • DOCTYPE设置为HTML5

//ajax calendars
jQuery(document).ready(function($) {

    //sidebar
    $(function() {
        var s = $('#s-calendar'), p = s.closest('.widget');
        console.log('Got this far!');

        //prevent collapse
        p.css('min-height', p.height());

        s.find('a.x-btn').live('click', function(e) {
            console.log('Sidebar Cal Clicked');
            var d = $(this).attr('data-cal-date'), n = $(this).attr('data-nonce');
            var url = $(this).attr('data-ajaxurl');
            $.ajax({
                url:url,
                type:'POST',
                data:'action=wpcal&sidebar=true&_wpcal_nonce='+n+'&date='+d,
                success:function(data) {
                    s.fadeOut(500, function() {
                        s.html(data).fadeIn(500);
                    });

                }
            });
            return false;
        });

    });
});

ANSWER

原来另一块JS导致生活无法正常工作。 live()方法需要事件传播才能正常工作。我的代码顶部有一小段JS,我有时觉得它很有用。

$('body a[href=#]').click(function(event) { event.preventDefault(); });

我使用该代码来防止在单击无用链接时页面跳转。这样就可以在点击它们时使用href =“#”标记所有'A'标签上的传播。我删除了它,一切正常。

此外,尽管jQuery Docs说使用jQuery 1.5.2,但live()方法在DOM遍历之后工作。无论如何我继续改变它,只是为了与文档内联。但它确实有效!谢谢你的帮助!

6 个答案:

答案 0 :(得分:3)

我认为这源于s.find的预评估。使用此代码会给您带来不同的结果吗?

$('#s-calendar a.x-btn').live('click', function(e) {

答案 1 :(得分:1)

我怀疑这里有一些问题

s.find('a.x-btn')

实时点击不应该有任何问题。

答案 2 :(得分:1)

请参阅实时警告:http://api.jquery.com/live/#caveats

具体地:
“查找要发送到.live()的元素不支持DOM遍历方法。而应始终在选择器后直接调用.live()方法......”

答案 3 :(得分:0)

我认为问题在于:

s.find('a.x-btn')

它没有返回正确的元素。

答案 4 :(得分:0)

这可能是由于您准备好嵌套文档吗?你能删除第二个吗?

//ajax calendars
jQuery(document).ready(function($) {

    //sidebar
    $(function() { // remove this one

答案 5 :(得分:0)

jQuery版本>的live()函数已被删除。 1.9。 试试像, $('#button_id')。on('点击',' button_tag_type',功能) 要么 $(' body')。on('点击',' .Button_class',功能)