2017-03-25 3 views
0

要素にjQueryを付けてcolspanを追加します。この関数をChromeのコンソールに挿入するとうまくいきますが、ドキュメントに書いて準備してスクリプトで実行すると、何も起こりません。この関数は、可能であればすべてのスクリプトが実行された後に実行する必要があります。あらゆるヒントが役立ち、HTMLへのアクセスはありません。すべて実行後のjQueryラン関数

$(document).ready(function() { 
    $("#fieldset_Q8aGrid td:eq(4)").attr('colSpan',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. 
}); 
0

あなたは彼らの順序を変更するには、スクリプトを再配置、またはwindow.loadで行くことができ、次のいずれか

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

しかし、これは文字通り、すべてのページが読み込まれた後に起動します。画像も。だから、最初のアプローチに行く方が良いでしょう。

1

を私はあなたがあなたのプログラム内のいくつかの非同期コードを持っていると仮定していますこと、例えば、動的HTMLを作成します。これは、すべての関数がいつ完全に実行されるかわからない場合に当てはまります。

この問題は2つの部分に分割できます。

  1. あなたが同期コードYの後に、関数Xを呼び出した場合、XがYの
  2. 後に起こるのだろう。しかし、あなたが非同期コードYの後に、関数Xを呼び出している場合は、あなたが最初に実行されるかわかりません。

解決するには、スクリプトの最後にコードを挿入するだけです。 2)を解決するには、jQueryの遅延を使用し、プログラムに明示的に指示する必要があります.X、Y、Zが実行されたときにこれを実行します。約束が何であるかの

クイック説明(および非常に正確ではない):

約束は、方法(thenable)を持つオブジェクトです。その後、この方法 は約束は、あなたがアニメーションの場合に解決される約束を作成するために.promise()メソッドを使用することができ、アニメーションから

を 解決されたときに呼び出される関数を受け取ることができます完了しました。あなたは、サービスへの呼び出しを行っている場合

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

は、jQueryのポストは約束たぶん

// 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を取得し、あなたはどちらもありませんいくつかの機能を持っています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

関連する問題