2011-09-07 40 views
11

我有一個帶有多個文本輸入的HTML表單。我想清除之前緊挨着的元素,直到按下「清除」按鈕。我如何在JavaScript中獲取該元素?如何在JavaScript中獲得之前關注的元素?

注意:重寫以考慮意見。

+1

當按下「清除」按鈕時,當前的焦點元素將是「清除」按鈕本身。好的,所以我有點傻,顯然你想知道哪個領域失去了重點,但是如果用戶使用tab鍵導航到「清除」會怎樣? – nnnnnn

+1

你應該編輯這個問題的瓦片,因爲沒有答案真的回答「如何獲得當前焦點元素的JavaScript」,我來到這裏通過搜索... –

+0

@BaptistePernet:檢查出祝福的答案... – HashimR

回答

10

當你點擊「清除」按鈕時,只有被聚焦的元素是「清除」按鈕。你必須解決它。 (觸發onb​​lur事件)

+0

是啊。那就是問題所在。我試圖用 document.activeElement 但沒有用。 :( – HashimR

+2

哦,那個悖論是悲劇...... * sob sob * – DhruvPathak

+1

我討厭'focus'事件沒有'justblurred'(或類似的)屬性,它可能是'null',它不是特定的元素 – nnnnnn

2

正如創世紀提到的那樣,點擊時清除按鈕將有焦點。但是,您可以通過爲表單創建一個onBlur事件來解決此問題,該事件會將之前觸摸的元素的ID存儲在變量或隱藏表單輸入中。

+0

不錯的解決方法 – genesis

6
var focused, inputs=document.getElemntsByTagName('input'); 
for (var i=0, input; i<inputs.length && input = inputs[i]; i++) { 
    if (input.type === 'text') { 
     // Better use addEventListener and attachEvent, I'm just too lazy to type that on my phone 
     input.onfocus = function() { 
      focused = this; 
     } 
    } 
} 

或者jQuery中: var focused; $('input:text').focus(function(){focused = this;});

比,當你想清楚聚焦元素,focused.value='';

+1

他沒有「jQuery」標記;)這不是我的downvote,雖然 – genesis

+0

哦,對不起,我已經習慣了99 JavaScript問題的百分比與jquery相關。我會更新答案,但我需要一些時間,從我的手機 – shesek

+0

很棒。+1。謝謝 – 2012-12-15 21:19:58

10

用於存儲當前聚焦元素的ID創建一個全局變量,

var cur_id; 

爲每個元素的onblur調用一個函數並通過ID

<input type="text" id="name" name="name" onBlur="setId(this.id)"> 

,並從功能

function setId(id) { 
    cur_id = id; 
} 

寫入將ID設置爲全局變量,並寫清楚按鈕的onclick功能,這樣

function clear() { 
    document.getElementById(cur_id).value = ""; 
} 
+0

+ 1.我沒有足夠的時間(學校)寫一些代碼 – genesis

+0

-1爲obtrusive js。 – shesek

+0

如何創建一個* local *變量?太前衛,我知道 –

3

最簡單的方法是在按鈕上的mousedown事件中存儲對document.activeElement的引用,雖然這是一個以鼠標爲中心的方法,並且不適用於鍵盤和其他設備的按鈕「點擊」。

現場演示:http://jsfiddle.net/tEP6w/

代碼:

var clearButton = document.getElementById("clear"); 
var previousActiveElement = null; 

clearButton.onmousedown = function() { 
    previousActiveElement = document.activeElement; 
}; 

clearButton.onclick = function() { 
    if (previousActiveElement && previousActiveElement != this) { 
     previousActiveElement.value = ""; 
    } 
}; 

一個更好的辦法是參考存儲document.activeElement作爲按鈕即將接收焦點。但是,在所有瀏覽器中實現這一點都有點棘手。

0

的思想工作上面,如果你與形式的工作,你可以定義一個隱藏的輸入,並分配給它的最後一個重點投入的id的值:

<input type="hidden" id="focused_element" value=""> 

$('input:text, textarea').focus(function() { 
    $('#focused_element').val($(this).attr('id')); 
}); 

,然後拿起值在適當的較晚時間:

var focused = $('#focused_element').val();