【问题标题】:do something when js element is loaded , is not working加载js元素时做某事,不工作
【发布时间】:2018-11-09 23:06:14
【问题描述】:

我有这个 Jquery 函数可以在元素准备好时单击它。它是一个区间,如下函数:

MonitorAndClick(selector) {
    var ele = $(selector);
    if (ele.length == 0) {
        var intervalid = setInterval(function () {
            var ele = $(selector);

            if (ele.length > 0) {
                ele[0].click();
                clearInterval(intervalid);

                return true;
            }
        }, 500);
    } else {
        ele[0].click();
        return true;
    }
}

问题是在某些情况下,它不起作用。但是这是一个间隔,它每 0.5 秒检查一次元素是否准备就绪,那怎么可能呢?有没有其他方法可以检查元素是否准备好?

补充说明:

我有一架手风琴。我有一个打开手风琴的功能->打开其中一个项目->详细打开标签页

这是函数:

 //--reach to this point, open accordion index 2--------
 ShowAccordion(2);
 //----open the item with specific Id in accordion items------
 setTimeout(function () {
    var selector = "tr[gacategory = '/myprotection/mywills/item_" + parseInt(willId) + "]";

MonitorAndClick(选择器); }, 500);

关键是这个元素应该在那里,有时它的加载速度不够快,我想有办法检查它是否已加载,然后点击它。

cmets 后更新代码

var selector = "tr[gacategory = '/myprotection/mywills/item_" + parseInt(willId) + "]";
    $("#selector").ready(function () {
        console.log('**********.... selector is loaded ....*****');
        if (!$("#selector").hasClass('selected')) 
            MonitorAndClick(selector);
    });

还是不行。

【问题讨论】:

  • @CertainPerformance 请检查编辑后的代码。谢谢

标签: javascript jquery timeout load setinterval


【解决方案1】:

你可能想试试https://api.jquery.com/ready/

似乎 jquery 就绪功能也可以应用于单个元素

【讨论】:

  • “也可以应用于单个元素”。不,它不能
  • 我说好像..我在看 $( "img" ).ready( handler ) ,可能是我错了
【解决方案2】:

您为什么要依靠 0.5 秒的延迟来确保您的元素存在于 DOM 中。只有在您的元素出现在 DOM 中之后,您才应该调用此函数。如果在将此元素添加到 DOM 时有另一个条件驱动,则在满足该条件后调用此函数。

【讨论】:

  • 我不知道如何检查元素是否存在,因为它正在加载,我只需要等待它加载。它并非只是有时才会发生。最后应该加载它。我该如何检查?
  • 如果它在页面加载期间加载,您可以使用 Jquery .ready() api.jquery.com/ready
  • 你的意思是我应该说 $('tr[gacategory = '/myprotection/mywills/item_" + parseInt(willId) + "]')..ready( function(){ MonitorAndClick(selector ); } );我试过一次,但没有用
  • 根据 jQuery API 文档,它应该可以工作。我刚刚看到您调用 MonitorAndClick 的代码。尽管您在 0.5 秒延迟后设置选择器的值,但您正在调用 MonitorAndClick 没有延迟并且可能将 undefined 作为参数传递。将其移入 setTimeOut 并尝试 ShowAccordion(2); //----在手风琴项目中打开具有特定ID的项目------ setTimeout(function () { var selector = "tr[gacategory = '/myprotection/mywills/item_" + parseInt(willId) + " ]"; MonitorAndClick(选择器); }, 500);
猜你喜欢
  • 1970-01-01
  • 2021-07-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-13
相关资源
最近更新 更多