一切运行后jQuery运行功能

时间:2017-03-25 13:43:02

标签: javascript jquery

我想将colspan与jQuery一起添加到元素中。如果我在Chrome中将此功能插入控制台,那么它可以正常工作,但是如果我把它放在文档就绪并在脚本中运行它就没有任何反应。如果可能,应在所有脚本运行后运行此函数。任何提示都会有所帮助,无法访问HTML。

$( document ).ready(function() {
    $("#fieldset_Q8aGrid td:eq(4)").attr('colSpan',3)
});

3 个答案:

答案 0 :(得分:1)

您可能正在运行一些异步脚本,这些脚本会在代码运行后添加内容。如果您无法访问其他代码,那么最实用的解决方案是不时尝试直到成功:

$( document ).ready(function() {
    var timer = setInterval(function () {
        if ($("#fieldset_Q8aGrid td:eq(4)").attr('colSpan',3).length) {
            clearInterval(timer);
        }
    }, 500); // check every half-second.
});

答案 1 :(得分:1)

我假设您的程序中有一些异步代码,例如,创建动态HTML。如果您不知道所有功能何时完全执行,就会出现这种情况。

我们可以将这个问题分成两部分。

  1. 如果在同步代码Y之后调用函数X,则X将在Y之后发生。
  2. 但如果您在异步代码Y之后调用了函数X,则不知道将首先执行什么。
  3. 要解决1)您只需将代码放在脚本的末尾即可。 要解决2)你必须使用jQuery的延迟以及何时明确地告诉你的程序:当X,Y,Z完成时执行它。

    快速解释(并且非常不准确)承诺的内容:

      

    promise是一个带有then方法的对象(可以)。那么方法   可以接收一个在承诺时将被调用的函数   解决

    从动画中,您可以使用 .promise()方法创建一个将在动画完成后解析的承诺。

      var animationPromise = $('h1')
        .css({'left': '0', 'position' : 'relative'})
        .animate({'left': '20px'}, 700, 'linear')
        .promise()
    

    如果您正在调用服务,jQuery的发布获取 ajax ,则返回承诺

      // save the promise for later use
      var asyncPromise = $.get('https://jsonplaceholder.typicode.com/users');
      // execute some the function that uses this data
      asyncPromise.then(function(users) { /* do something with the data */ })
    

    也许,你有一些既不是AJAX也不是动画的功能,在这种情况下你可以创建自己的承诺。例如,此承诺是从setTimeout解决的。

      var backgroundChange = $.Deferred()
      setTimeout(function() {
        $('body').css('background', 'lightblue')
        backgroundChange.resolve(true)
      }, 3000) /* Please note that backgroundChange 
                  doesn't know that it will be resolved after 3 seconds */
    

    稍后,您可以使用 .when(...)创建在解决一组承诺时解析的承诺。

      $.when(asyncPromise, backgroundChange, animationPromise)
        .then(function() {
        $('.container').css('color', 'blue')
        //alert('Everything is done!');
      })
    

    这是一个解决两个问题https://codepen.io/anon/pen/JWBXLd?editors=1010

    的工作示例

答案 2 :(得分:0)

您可以重新排列脚本以更改其顺序,也可以使用window.load:

$(window).load(function() {
// code
});

但是在你的所有页面都被加载之后,这将会激活。甚至图像。因此,采用第一种方法会更好。