2011-09-07 20 views
11

Tôi có một biểu mẫu HTML có nhiều đầu vào văn bản. Tôi muốn xóa phần tử có tiêu điểm ngay trước khi nhấn nút 'Xóa'. Làm thế nào để tôi nhận được phần tử đó trong JavaScript?Làm cách nào để lấy phần tử được tập trung trước đó trong JavaScript?

Lưu ý: Được đánh giá để tính đến nhận xét.

+1

Phần tử được lấy nét hiện tại khi nút "Xóa" được nhấn sẽ là nút "Xóa". OK, vì vậy tôi là một chút ngớ ngẩn và rõ ràng là bạn muốn biết lĩnh vực nào chỉ mất tập trung, nhưng nếu người dùng điều hướng đến "Xóa" bằng cách sử dụng phím tab? – nnnnnn

+1

bạn nên chỉnh sửa ô xếp của câu hỏi này, vì không có câu trả lời nào thực sự trả lời "Cách lấy phần tử tập trung hiện tại trong javascript" và tôi đến đây bằng cách tìm kiếm ... –

+0

@BaptistePernet: Xem câu trả lời may mắn ... – HashimR

Trả lời

10

Khi bạn nhấp vào nút "xóa", chỉ phần tử tập trung là nút "rõ ràng". Bạn sẽ phải giải quyết nó. (sự kiện onblur kích hoạt)

+0

yea . đó là vấn đề. tôi đã cố gắng sử dụng document.activeElement nhưng không sử dụng. :( – HashimR

+2

Ohh nghịch lý đó là bi kịch ... * sob sob * – DhruvPathak

+1

Tôi ghét cách sự kiện 'focus' không có thuộc tính' justblurred' (hoặc tương tự). Nó có thể là 'null', nó không phải là một – nnnnnn

2

Như Genesis đề cập, nút rõ ràng sẽ có tiêu điểm khi được nhấp. Tuy nhiên, bạn có thể làm việc xung quanh điều này bằng cách có một sự kiện onBlur cho biểu mẫu của bạn sẽ lưu trữ id của phần tử được chạm trước đó trong một đầu vào biểu mẫu biến hoặc ẩn.

+0

workaround tốt đẹp – 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; 
     } 
    } 
} 

Hoặc trong jQuery: var focused; $('input:text').focus(function(){focused = this;});

Thân, khi bạn muốn xóa các yếu tố tập trung, focused.value='';

+1

ông đã không "jQuery" thẻ ở đó;) Nó không phải là downvote của tôi mặc dù – genesis

+0

Oh, xin lỗi, tôi đang sử dụng đến 99 % câu hỏi JavaScript có liên quan đến jquery. Tôi sẽ cập nhật câu trả lời, nhưng nó sẽ đưa tôi một số thời gian gõ rằng từ điện thoại di động của tôi – shesek

+0

tuyệt vời .. 1. Cảm ơn –

10

Tạo một biến toàn cục để lưu trữ id tập trung yếu tố hiện tại,

var cur_id; 

gọi một hàm cho onblur của từng phần tử và chuyển id

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

và viết tập id để biến toàn cầu từ chức năng mà

function setId(id) { 
    cur_id = id; 
} 

và viết một hàm cho onclick của nút rõ ràng, như thế này

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

+ 1. Tôi không có đủ thời gian (trường học) để viết một số mã số – genesis

+0

-1 cho js khó chịu. – shesek

+0

cách tạo biến * cục bộ *? quá sắc sảo, tôi biết –

3

Cách đơn giản nhất là lưu trữ tham chiếu đến document.activeElement trong sự kiện mousedown trên nút, mặc dù đây là phương pháp tập trung vào chuột và sẽ không hoạt động đối với nút "nhấp chuột" từ bàn phím và các thiết bị khác.

Live Demo: http://jsfiddle.net/tEP6w/

Code:

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

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

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

Một cách tiếp cận tốt hơn sẽ được lưu trữ một tham chiếu đến document.activeElement như nút sắp nhận được sự tập trung. Tuy nhiên, đây là một chút khó khăn để đạt được độc đáo trong tất cả các trình duyệt.

0

Làm việc trên những ý tưởng trên, và nếu bạn đang làm việc với một hình thức, bạn có thể xác định một đầu vào ẩn và gán cho nó một giá trị của id tập trung đầu vào ngoái:

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

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

và sau đó nhặt giá trị vào thời điểm thích hợp sau này:

var focused = $('#focused_element').val(); 
Các vấn đề liên quan