2013-06-26 9 views
5

Sto cercando di permettere a tutti i form doppio click del modulo, e hanno semplificato il codice come segue:doppio clic disabilitato casella di selezione per abilitare

<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> 

Tuttavia, l'evento modulo doppio click non si attiva mentre si posiziona il mouse sopra l'elemento disattivato <select>. E sfortunatamente, lo "readonly" attribute non funziona sugli elementi <select>.

Questo è per un'applicazione interna e ho solo bisogno della funzione su Google Chrome.

UPDATE:

sto ricevendo un sacco di risposte su questo, e penso che ho bisogno di rivedere la mia domanda per aiutare a guidare il processo di ... Che cosa significa la specifica W3C sui disabili elementi del modulo dire? ... Sembra che l'evento doppio clic non attivi sugli elementi <input> disattivati ​​in Firefox, ad esempio. Forse il fatto che funzioni in Chrome è un bug/disallineamento con specifiche che non posso contare sul fatto di essere sempre lì.

Al momento, guardando per l'evento doppio clic su un elemento di involucro posizionato in modo assoluto sopra il modulo sembra che l'opzione migliore ... anche se io odio l'aggiunta di elementi involucro in più.

risposta

3

Si potrebbe usare che:

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

Interessante. Questo risponde alla domanda come meglio indicato ... tuttavia, qual è la specifica W3C per gli elementi dei moduli disabilitati? Forse, l'evento di doppio clic che si attiva in Chrome su '' elementi è un bug? –

+0

@DavidBudiac è vero, forse è un bug, in questo caso usa ': input' non 'seleziona' come selettore per aggiungere classe –

4

Vorrei suggerire mettere un div sovrapponendo l'intero form e inserire il gestore di clic su questo. I campi disattivati ​​non attivano i gestori dei clic.

+2

Ma il gestore click è per il 'form', che non viene mai disattivata, solo i campi all'interno del modulo. Fare doppio clic sull'input di testo disabilitato funziona bene., – tymeJV

+0

@tymeJV> La proposizione di Still James sembra buona. –

+1

@Bartdude - Sono d'accordo, mi chiedo solo perché il doppio clic funziona sull'input di testo disabilitato e non su 'select'. – tymeJV

0

Prova questo:

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); 
}); 

Live Demo:

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

(Basta fare doppio clic sul div rosso e dare un'occhiata).

+1

Ancora non riesce se fai doppio clic sulla selezione. – j08691

+0

Posso capire perché questo requisito è necessario, penso che un evento 'double-click' assegnato al div del' wrapper' sia sufficiente. –

+2

È una buona UX? Che dire dell'accessibilità? Perché non usare un pulsante o una casella di controllo? Si potrebbe aggiungere un pulsante in ogni caso, per coloro che non possono fare doppio clic. –

Problemi correlati