2016-08-25 4 views
0

問題がありますが、javacriptではかなり一般的だと思いますが、何を検索するのかわかりません。Jqueryで長いプロセスを実行する前後の要素のCSSを変更します

JSfeedle相当:私はonclickの、そしていくつかのコードを実行し、元のものに色を設定する矢印の色を変更したいソリューションのおかげ@Joe https://jsfiddle.net/Draykoon/55jzr2uq/20/

https://jsfiddle.net/Draykoon/55jzr2uq/19/ feedle。

私は例としてsleepを使用しますが、それは時間がかかりますが、どれくらいの数がわからないかの機能です。 このコードを考えてみます。#FF9900の色が画面に表示されていない

function sleep(seconds) 
{ 
    var e = new Date().getTime() + (seconds * 1000); 
    while (new Date().getTime() <= e) {} 
} 

$('i.fa-chevron-circle-left').click(function(){ 
    var id = $(this).attr("id"); 
     $($("div.tab-pane")[id]).find("i.fa-chevron-circle-left").css("color","#ff9900"); 
     sleep(1); 
     $($("div.tab-pane")[id]).find("i.fa-chevron-circle-left").css("color","#8BBE22"); 
}); 

私は#8BBE22に色をリセットしていないとき、それはこのコード行をスキップして悪化しているているように、変更は後にのみ表示されます"sleep(1)"を呼び出すと、ユーザーに通知する必要があります。私は、私は同じ結果を得た $("div.tab-pane:nth-child(" +(id+1).toString() + ")" + " i.fa-chevron-circle-left") を試してみてください 、 $($("div.tab-pane")[id]).find("i.fa-chevron-circle-left")は適切ではありません知っている

$('i.fa-chevron-circle-left').click(function(){ 
     var id = $(this).attr("id"); 
      $($("div.tab-pane")[id]).find("i.fa-chevron-circle-left").css("color","#ff9900"); 
      sleep(1); 
      //color showing after 1 sec 
    }); 

、色がなく、遅延を変更。

私はJavaScriptの重要な振る舞いが見当たりません。他の関数の呼び出しに置き換えるべきである

睡眠は、私は、実行時(実際にグラフを再描画)事前に

感謝を知りません。

+0

'div.tab-pane'のHTMLを投稿できますか? [** Stack Snippet **](https://blog.stackoverflow.com/2014/09/introducing-runnable-javascript-css-and-html-code-snippets/)や[** Fiddle **](http:// jsfiddle。net /) – Pugazh

+0

それはテンプレートから来て、ライブラリを使用してsvgを生成します。もし私がそれを見つけ出すことができれば、申し訳ありません。 –

+0

私たちはグラフのコードを書き直してください –

答えて

1

あなたは、関数を呼び出したり、指定遅延後にコードスニペットを実行

setTimeout

を使用してそれを達成することができます。それはあなたのスクリプトが同期しているようDOMへの変更は、適用される前に全体だでスクリプトを実行するため

$('i.fa-chevron-circle-left').click(function(){ 
    var self = $(this); 
    self.css("color","#ff9900"); 
    //Add your code, which you want to execute 

    //Reset color after 1 second 
    setTimeout(function(){ 
     self.css("color","#8BBE22"); 
    }, 1000) 
}); 
+0

ありがとう、私の問題exeept私don私のコードを実行するのにどれくらいの時間がかかるかはわかりません。私はグラフを再描画し、最後に元の色に戻す必要があります。私は睡眠を使用しますが、実際にはそれを再描画します –

+0

@DraykoonD、コードを共有できますか? – Satpal

+0

webserviceとajaxリクエストを使用して新鮮なデータを取得しますが、同じドメインにいない場合は機能しません。これはサンプルに近いですが、sleepを実行する時間がかかる関数に置き換えるだけです。 @Joeのように私は別のスレッドでこのメソッドを実行する必要があると言った –

0

です。基本的には、最初の色を別のスレッドで2番目の色を設定するコードに設定するコードが必要です。そうでない場合は、同時に適用されます。

これを達成するために、@ SetpalはsetTimeoutを使用できることに注意しました。コードで

更新

私は関数を呼び出すと、それはそうのように変更するには、矢印かを知っているので、IDを渡す

$('i.fa-chevron-circle-left').click(function(){ 
    var self = $(this); 
    self.css("color","#ff9900"); 

    setTimeout(function(){ 
     //Add your code, which you want to execute 
     self.css("color","#8BBE22"); 
    }, 0) 
}); 
+0

あなたは正しいです、ありがとうございますsettimeoutせずに別のスレッドで関数を起動する方法はありますか? –

+0

この回答に記載されているように - http://stackoverflow.com/questions/9516900/how-can-i-create-an-asynchronous-function-in-javascript setTimeoutまたはsetIntervalは、実際のオプションのみです。 setTimeout({longFunction();}、0)を使うことができます。現在の呼び出しスタックが終了した直後に長時間実行される関数を開始します。したがって、あなたの場合は、初期カラーセットに続くすべてをタイムアウトに入れてください。 – Joe

+0

ありがとう、それは完全に動作します。それは少し気が利いたが、それは仕事をした。 –

0

@ Setpalのコードの修正版:

$('i.fa-chevron-circle-left').click(function(){ 
    var $this = $(this); 
    var id = $this.attr("id"); 
    $this.css("color","#ff9900"); 
    myFunction(id); 
}); 

myFunction(id) { 
    // do something 
    $("#" + id).css("color","#8BBE22"); 
} 
+0

私はajaxコールバックを使用できません。私のprolemはこれに近いです。https://jsfiddle.net/Draykoon/55jzr2uq/19/ –

関連する問題