【问题标题】:Waypoint and Inview jquery. How to Fix DOM Issue航点和查看 jquery。如何修复 DOM 问题
【发布时间】:2016-05-27 01:05:22
【问题描述】:

我正在尝试自定义一个名为 wp post Listing 的 wordpress 插件。我想定位包装加载更多按钮的#basic-waypoint-cyberwrath,因为该插件没有自动化功能。它需要手动点击我不喜欢的加载更多按钮。

这是我目前获得的代码:

var inview = new Waypoint.Inview({
    element : $('#basic-waypoint-cyberwrath')[0],
    enter : function(direction) {
        //alert('Enter triggered with direction ' + direction)
    },
    entered : function(direction) {
        //alert('Entered triggered with direction ' + direction)
        $('.wpp_loadmore_pager').click();
    },
    exit : function(direction) {
        //alert('Exit triggered with direction ' + direction)
    },
    exited : function(direction) {
        //alert('Exited triggered with direction ' + direction)
    }
});

当我使用警报功能时。无论我滚动到 ID 多少次,它都会在 inview 中很好地提醒。它不断触发警报功能。但是当我使用点击功能时。它只触发一次,因为每次单击加载更多按钮时都会动态加载#basic-waypoint-cyberwrath。这是迄今为止我所做的最接近的代码。 .

这是我目前获得的航路点代码:

var $fusionheader = $('#basic-waypoint-cyberwrath');
$fusionheader.waypoint(function(direction) {
    if (direction === 'down') {
        // do stuff
        //alert('I am going down');
        $('.wpp_loadmore_pager').click();
    }
    jQuery.waypoints('refresh');
}, {
    offset : '90%'
});

我已经尝试了几乎所有方法。我不知道我在这里错过了什么。 第一次向下滚动时两者都很好,然后在看到#basic-waypoint-cyberwrath 时触发,但在第 2 轮中不再触发,等等加载更多按钮以查看其他帖子列表。

我什至尝试了 for 循环语句,但仍然没有运气:

var discreteElements = document.getElementById('basic-waypoint-cyberwrath');
for (var i = 0; i < discreteElements.length; i++) {
    new Waypoint.Inview({
        element : this,
        enter : function(direction) {
        },
        entered : function(direction) {
            //animatelettering.textillate('in')
            $('.wpp_loadmore_pager').click();
        },
        exit : function(direction) {
            //animatelettering.textillate('out')
        },
        exited : function(direction) {
        }
    });
};

请帮忙。

【问题讨论】:

  • 这听起来像是一个 DOM 问题。 .wpp_loadmore_pager 很可能在滚动后被动态添加,因此 .click() 只影响原始 DOM 元素。单击.wpp_loadmore_pager 时会发生什么(或应该发生)?另外,您可以手动单击该元素吗?如果可以,它是否有效?
  • 是的,约翰。关于 DOM 问题。我懂了。我不知道。我想这就是问题所在。有什么解决办法吗?你是对的。 wpp_loadmore_pager 确实在无限滚动中动态加载
  • @johnniebenson 当您单击 .wpp_loadmore_pager 时。它会消失,并且会出现一个加载图标。它将加载其他 10 个帖子列表,然后在加载 10 个帖子列表后会显示一个新的 .wpp_loadmore_pager 按钮。

标签: javascript jquery wordpress jquery-waypoints


【解决方案1】:

您需要追踪导致这些帖子加载的实际原因(可能是一个函数),并将处理程序重新附加到那里的点击事件。您可以使用

来完成此操作
$(".container").on("click", ".wpp_loadmore_pager", function() {
    //load_function();
});

很可能.wpp_loadmore_pager 在某处附加了一个点击事件,并且它正在运行一些函数(load_posts()、get_posts() 等)。在该函数中,您可能会看到重新创建该按钮的代码。那是您需要重新附加处理程序的地方。

【讨论】:

  • 您好 Johnniebenson,感谢您的帮助,但我不确定您是否了解我的需要。只是为了更清楚,看看我们是否在同一页面上。查看此视频:cyberwrathinternetmarketing.com/graphicdesigns/…
  • 如您所见。具有无限滚动的 wordpress 插件仍然需要手动单击加载更多按钮,但我不喜欢这种概念。使用我的自定义代码。当我向下滚动并使用航点和视点命中目标 ID 时。我能够自动化按钮上的点击事件。但在第二个向下滚动。自动点击不起作用。这就是我需要修复它的 DOM 问题开始的地方。
  • 要明确一点,你的 on() jquery 是这种自动化点击的解决方案吗?我认为您对 on() 的建议仍然需要手动单击它?在其中它必须不需要手动单击。当它向下滚动到目标 ID basic-waypoint-cyberwrath 时,它应该会自动单击。一旦此代码完美运行。我将能够永久隐藏加载更多按钮。就像在 newsroom.uber.com 中一样,这是我的最终目标。 :)
  • 当您在没有处理程序的情况下使用.click() 时,您将触发点击事件。这与使用鼠标单击某物相同。如果您传递了一个处理程序.click(function() { ... }),则您将该处理程序绑定到单击事件。这就像说“如果该元素被点击,则运行此代码”。问题是动态添加的元素(您的新按钮)没有任何绑定到它们的内容,因为它们是在加载 DOM 之后创建的。这就是.on() 派上用场的地方。您可以将处理程序附加到父元素并将其应用于特定的选择器。
  • 话虽如此,我对使用.on() 的建议将允许您在该按钮的所有未来克隆上继续使用$(".wpp_loadmore_pager").click(),我认为这是您的初衷。我现在想到,您可以将其替换为显示下一页数据的函数,而不是使用.click()触发单击。这应该对您有用,并有助于摆脱麻烦的动态按钮和强制点击。这有意义吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多