2015-07-10 93 views
-1

我正在尋找頁面上的某些特定文本,然後在文本存在的情況下自動單擊按鈕(否則在幾秒鐘後重新加載頁面)。我想要的是在點擊執行後(稍微延遲一點)重新加載頁面。這是我的代碼是不工作的:單擊按鈕,等待並重新加載頁面

var content = document.body.textContent || document.body.innerText; 
var hasText = content.indexOf("this is my text")!==-1; 
el = document.querySelector(".btn.secondClass"); 

if(hasText && el){ 
    el.click() 
    { 
    setTimeout(function(){ 
     window.location.reload() 
    },5000); 
    } 
} 
else { 
    setTimeout(function(){ 
    window.location.reload() 
    },5000); 
} 

這似乎是5秒後重新加載頁面,點擊不會被解僱。我錯過了什麼嗎?

+1

'jquery'標籤的用途??? –

+0

你在做什麼點擊 –

+0

http://jsfiddle.net/arunpjohny/d9tavLcv/1 –

回答

1

使用.trigger方法強制點擊。使用以下代碼:

var content = document.body.textContent || document.body.innerText; 
var hasText = content.indexOf("this is my text") !== -1; 
el = document.querySelector(".btn.secondClass"); 

$(el).click(function() { 
    setTimeout(function() { 
     window.location.reload(); 
    }, 5000); 
}); 

if (hasText && el) { 
    $(el).trigger('click'); 

} else { 
    setTimeout(function() { 
     window.location.reload() 
    }, 5000); 
} 

說明:使用.click()綁定元素的單擊事件。然後檢查你的情況,如果滿意,強迫按鈕點擊使用.trigger()。由於el是DOM節點,因此要將其轉換爲jquery對象,它必須包含$()

+0

沒有'trigger()'DOM節點方法 –

+0

我在說jQuery .trigger()「http:// api .jquery.com/trigger /「 –

+1

但是'el'是一個DOM節點對象 –

-1

試試這個:

if (your condition = true) { 
    setInterval(function() { 
    $(".btn.secondClass").trigger("click"); 
    window.location=""; 
    }, 5000); 
} 
     } 
1

假設我明白你想實現的,你在五秒後重定向因爲setTimeout呼叫總是正進行什麼。您有一個if聲明,但在兩個塊中都包含setTimeout。爲什麼?

setTimeout需要一個字符串來評估或回調函數。在這種情況下,您的回調函數是window.location.reload - 您無需將其包裝在另一個匿名函數中。使用 -

setTimeout(window.location.reload, 5000); 

改爲。

所以你簡化代碼將是 -

if (hasText && el) { 
    el.click(); 
    setTimeout(window.location.reload, 5000); 
} 

沒有else塊。

+0

你是對的,這是有道理的,即使對我來說:D – Paranoia