2014-03-31 165 views
0

這看起來像一個簡單的問題。我試過Google的答案,但我似乎無法找到它,所以我就是爲了尋求幫助。部分問題是我無法正確地說出問題,所以我會在這裏解釋它。這裏去...使用JavaScript清除功能

我在我的JavaScript文件中有兩個函數(讓我們將它們命名爲fn1()fn2())。我在我的HTML文件中使用onclick來調用這些函數。例如:

<span class="test" onclick="fn1();">Button #1</span> 
<span class="test" onclick="fn2();">Button #2</span> 

當用戶點擊各自的按鈕時,這些函數可以很好地工作。但是,如果用戶點擊了按鈕#1,然後點擊了按鈕#2,則同時調用/加載這兩個功能。

問題:我如何讓這個fn1()被禁用(或清零),只要對按鍵#2的用戶點擊,這將載入fn2()

謝謝。

回答

2

您可以使用jQuery的方式noop method

在FN1()函數,你應該使用$ .noop()清空功能FN2()

或僅僅作爲你在調用的onclick它,你可以刪除該功能中的該屬性。 (我不推薦使用此)

$('span.test').not($(this)).removeAttr('onclick'); 

但我非常推薦使用namespace通過它可以解除綁定類似下面而不是調用內嵌的JavaScript單擊事件:

on method

$("span.test").on("click.something", function(event) { 
//do your stuff here 
}); 

之後,您可以解除綁定click事件是這樣的:

off method

$("span.test").off("click.something"); 
+0

很多這裏的建議,但這個爲我工作,謝謝!我猜我正在尋找「解除點擊事件」的短語。 – mapr

0

的好方法:當你進入fn1(而不是禁用功能)禁用fn2按鈕。這也具有讓用戶知道該按鈕不可用的副作用。禁用的元素不會觸發'點擊'事件。

$('span.test').not($(this)).prop('disable', true); 

的不那麼好的路:設置一個變量,當你在一個功能是,當清除你退出。如果設置了變量,則從函數提前返回。

徹頭徹尾的醜陋方式:如果點擊某個按鈕,則將onclick與其他按鈕解除綁定。這太亂了,你真的不想這樣做。

I-really-can't-recommend-it-less的方式:用no-ops重新定義其他函數。

0

我不知道我是否正確理解您的問題,並且我沒有足夠的代表來發表評論 但是如果您希望用戶無法按第二個按鈕,直到第一個完成執行,那麼您可以執行在FN2的第一行follwing

()添加以下行

document.getElementById("button1").disabled = true 

但你應該先給出一個id button1的第一個按鈕

這將灰色按鈕button1當用戶按下按鈕

您的代碼之後執行完畢,你應該加上:

document.getElementById("button1").disabled = false 

這將使該按鈕可按壓再次

0

U可以用旗幟試試這個,這是不會清除功能例如:

var runFn1 = true; 

function fn1() { 
    if (!runFn1) { 
    return; 
    } 
    // ur code here 
} 

function fn2() { 
    runFn1 = false; 
    // ur code here 
} 
0

「當用戶點擊各自的按鈕時,這些功能可以很好地工作。但是,如果用戶點擊按鈕#1,然後按鈕#2 - 兩個功能都被同時調用/加載。「

javascript is single thread。fn1()執行完畢,然後是fn2()。希望大家明白不會有一個地方都被同時呼叫的情況。

例如

function fn1(){ 
    while(true){ 
    } 
} 

function fn2(){ 
    alert("2"); 
} 
<input type="button" value="Btn1" onClick="fn1();"/> 
<input type="button" value="Btn2" onClick="fn2();"/> 

嘗試調用FN1()。你會驚訝FN2()不能調用!