2014-11-24 64 views
-2

我正在使用一個函數,我發現使用googling來禁用DIV中的所有鏈接。如何在HTML禁用後重新啓用HTML中的鏈接?

它工作正常,我完全明白它在做什麼。 這是它:

function disableLinksByElement(el) { 
    if (document.getElementById && document.getElementsByTagName) { 
    if (typeof(el) == 'string') { 
     el = document.getElementById(el); 
    } 
    var anchors = el.getElementsByTagName('a'); 
    for (var i=0, end=anchors.length; i<end; i++) { 
     anchors[i].onclick = function() { 
     return false; 
     }; 
    } 
    } 
} 

不幸的是,爲了使這些鏈接再次,它是不夠的,設置所有的「點擊」返回true,因爲 - 這是我的猜測 - 我的大部分環節都呼籲JS功能,而且它們不是簡單的www鏈接。總之,這就是我正在做的事情:我正在使用Ajax調用,完成後用一些更新的HTML代碼填充特定的DIV。 與此同時,我將DIV調暗至50%(不透明度,IE8 +安全)並禁用鏈接。 當Ajax調用返回時,它們取消調暗DIV和(嘗試去,沒有成功)重新啓用鏈接。請注意,Ajax調用真正產生在DIV「新」的HTML代碼,所以這些鏈接應該是全新的 - 而不是阻止,但他們是...

SAMPLE OF LINKS THAT GET DISABLED BUT NOT RE-ENABLED IN THE DIV 
THESE ARE PHP-GENERATED FROM SCRATCH EACH TIME 

<a class="btn" onclick="someJSfunction(2,1,50041); return false;">Do something</a> 

<a href="#" onclick="someOtherJSFunction(1); return false;"> 
<img src="imguser/thumb_4596543689.jpg" width="25px" height="25px"> 
</a> 

免責聲明:本人完全清楚,使用jQuery會更容易,而且我完全知道,使用客戶端調試器時,任何用戶在執行函數時都可以「調用」這些鏈接。所有的安全檢查都在服務器端完成,所以不要擔心。這只是爲了阻止不耐煩的用戶。

+0

什麼是你的相關,最小(簡單,*代表*)的HTML? – 2014-11-24 18:02:20

+0

對不起,我不明白。你對相關的HTML有何意義? – ZioBit 2014-11-24 18:03:27

+0

這是什麼(代表性的)HTML操作。或者你想讓我們開始猜測發生了什麼? – 2014-11-24 18:04:21

回答

1

最後,這是我已經找到了最好的解決辦法:

function disableLinksByElement(el) { 
    document.getElementById(el).style.pointerEvents = "none"; 
    document.getElementById(el).style.opacity = 0.2; 
} 

function enableLinksByElement(el) { 
    document.getElementById(el).style.opacity = 1; 
    document.getElementById(el).style.pointerEvents = "auto"; 
} 

不透明度,當然,這只是告訴我發生了什麼事。 從這裏:

http://caniuse.com/#search=pointerevents

我可以看到,只有「大」的問題可能是,如果你使用IE瀏覽器,你至少需要IE11看到它的工作,但我的回答也只是「開始使用一個真正的瀏覽器「...

1

在更改超鏈接的onclick的處理函數之前,請對舊函數進行一定的修改,以便恢復它。

事情是這樣的:

function Test1() { 
 
    alert('test 1'); 
 
} 
 

 
function Test2() { 
 
    alert('test 2'); 
 
} 
 

 
function disableLinksByElement() { 
 
    var hyp = document.getElementsByTagName('a'); 
 
    for (var i = 0; i < hyp.length; i++) { 
 
    hyp[i].Oldonclick = hyp[i].onclick; 
 
    hyp[i].onclick = function() { 
 
     return false; 
 
    } 
 
    } 
 

 
} 
 

 
function enableLinksByElement() { 
 
    var hyp = document.getElementsByTagName('a'); 
 
    for (var i = 0; i < hyp.length; i++) { 
 
    hyp[i].onclick = hyp[i].Oldonclick; 
 

 
    } 
 

 
}
<a onclick="Test1(); ">Test 1</a> 
 
<br /> 
 
<a onclick="Test2(); ">Test 1</a> 
 
<br /> 
 
<button onclick="disableLinksByElement()">disable</button> 
 
<br /> 
 
<button onclick="enableLinksByElement()">enable</button>

+0

我只是添加一個檢查,看看在分配之前'Oldonclick'實際上是否有一些東西。除此之外的+1 – epascarello 2014-11-24 18:57:42