2012-01-12 40 views
0

我試圖找到一種方法來停止某個點的功能,直到某些事物沒有特定的類。我不能改變這個類被分配和移除的地方,因爲它是一個插件。jQuery while object.hasClass

我的想法做這樣的事情

function DoSomething() { 
     while ($('div.divControl').hasClass('playing')) 
     { 
      //Wait here 
     } 
    }; 

的這是正確的方式去?

+0

爲什麼不編輯插件本身?這很可能會導致崩潰。 – OptimusCrime 2012-01-12 15:37:48

+1

你應該檢查你是否不能使用插件本身......「播放」聽起來像是視頻或音頻播放器的愛好者。如果這是一個很好的插件,我想可能會有'onstop'或'onfinish'事件(或類似的東西),你可以聽。 – Connum 2012-01-12 15:41:18

+1

如果沒有任何onstop或onfinish事件,添加它們並不難。 – 2012-01-12 15:42:27

回答

3

這將阻止這樣的元件將永遠不會被改變,因爲沒有任何其他的代碼將被執行。 你需要使用什麼是時間間隔:

var interval = setInterval(DoSomething, 500); 

function DoSomething() { 
     if ($('div.divControl').hasClass('playing')) 
     { 
      // Do something 
      clearInterval(interval); 
     } 
    }; 

這將執行該功能每半秒。該功能成功後,間隔將被取消。

+2

請不要將字符串傳遞給'setTimeout',它使用'eval'。傳遞函數。我編輯了你的答案來反映這一點。 – 2012-01-12 15:40:24

+0

請不要在你的setInterval參數中使用文本。只需傳遞實際的函數參考。而且,您將需要在兩個地方使用相同的大寫(函數引用和函數名稱),因爲您現在擁有的內容不起作用。 – jfriend00 2012-01-12 15:41:02

+0

對不起'eval'警察:) – Jivings 2012-01-12 15:45:12

1

不,這會在瀏覽器進入無限循環時掛起。

最好的辦法就是在功能上做一個setTimeout,然後讓它檢查一下你的div是否每個季度都有這個類。

不過,不是很好在所有= [

+0

這是一個馬虎的修復。 – 2012-01-12 15:39:38

+0

我不反對你:P – Doug 2012-01-13 10:26:17