2013-06-26 3 views
5

Próbuję włączyć wszystkie elementy formularza na podwójnym kliknięciem formie i uprościły kod w następujący sposób:Podwójne kliknięcie wyłączona wybierz opcję, aby umożliwić

<form> 
    <input type="text" name="foo" disabled /> 
    <select name="bar" disabled> 
     <option>a</option> 
     <option>b</option> 
    </select> 
</form> 

<script type="text/javascript"> 
    $(function() { 
     $('form').dblclick(function() { 
      $(this).find('input,select').removeAttr('disabled'); 
     }); 
    }); 
</script> 

Jednak zdarzenie forma podwójne kliknięcie nie ognia podczas unoszenia nad wyłączonym elementem <select>. I niestety, "readonly" attribute nie działa na elementach <select>.

Jest to aplikacja wewnętrzna i potrzebuję jej tylko w Google Chrome.

UPDATE:

Dostaję kilka odpowiedzi na to i myślę, że muszę zmienić moje pytanie, które pomogą prowadzić proces ... Co W3C specyfikację elementów formularza na niepełnosprawnych mówić? ... Wygląda na to, że zdarzenie z podwójnym kliknięciem nie uruchamia się na przykład na wyłączonych elementach <input> w Firefoksie. Być może to, że uruchamia się w Chrome, to błąd/niewspółosiowość w specyfikacji, na którą nie mogę liczyć.

W tej chwili oglądanie zdarzenia podwójnego kliknięcia na całkowicie umieszczonym elemencie opakowania powyżej formularza wydaje się najlepszą opcją ... mimo że nie cierpię dodawania dodatkowych elementów opakowania.

Odpowiedz

3

Można użyć tego:

DEMO

$(function() {  
    $('form').dblclick(function() { 
     $(this).find('input,select').removeProp('disabled').removeClass('no-pointer'); 
    }).find(':input').addClass('no-pointer'); 
}); 

CSS:

.no-pointer{pointer-events:none} 
+0

Interesujące. Odpowiedź na to pytanie jest najlepsza ... jednak jaka jest specyfikacja W3C dla zdarzeń wyłączonych z elementów formularza? Być może zdarzenie z dwukrotnym kliknięciem w Chrome w elementach ' 'jest błędem? –

+0

@DavidBudiac to prawda, może to błąd, w tym przypadku użyj ": input", a nie "select" jako selektora, aby dodać klasę. –

4

Sugerowałbym umieszczenie div nakładającego się na cały formularz i umieszczenie na nim obsługi kliknięcia. Wyłączone pola nie uruchamiają programów do obsługi kliknięć.

+2

Ale obsługa kliknięć dotyczy "formularza", które nigdy nie jest wyłączone, tylko pola w formularzu. Podwójne kliknięcie wyłączonego wprowadzania tekstu działa dobrze., – tymeJV

+0

@tymeJV> Propozycja Still Jamesa wydaje się być dobra. –

+1

@Bartdude - Zgadzam się, po prostu zastanawiam się, dlaczego podwójne kliknięcie działa na wyłączonym wprowadzaniu tekstu, a nie na "wybierz". – tymeJV

0

Spróbuj:

HTML:

<div id="wrapper"> 
    <form> 
     <input type="text" name="foo" disabled/> 
     <select name="bar" disabled> 
      <option>a</option> 
      <option>b</option> 
     </select> 
    </form> 
</div> 

jQuery:

$('#wrapper').dblclick(function() { 
    $('form').find('input, select').prop('disabled', false); 
}); 

żywo Demo:

http://jsfiddle.net/oscarj24/TvBR6/3/

(Wystarczy dwukrotnie kliknąć na czerwony div i spojrzeć).

+1

Ciągle nie powiedzie się, jeśli dwukrotnie klikniesz wybór. – j08691

+0

Potrafię zrozumieć, dlaczego to wymaganie jest potrzebne, myślę, że zdarzenie typu "double-click" przypisane do 'wrapper' div jest wystarczające. –

+2

Czy to jest dobre UX? A co z ułatwieniami dostępu? Dlaczego nie skorzystać z przycisku lub pola wyboru? W każdym razie możesz dodać przycisk dla tych, którzy nie mogą dwukrotnie kliknąć. –