2015-09-26 19 views
5

Gli elementi di input possono essere facilmente disabilitati, ma che modo c'è per abilitarli?Impossibile abilitare l'ingresso disabilitato

Il codice seguente può disabilitare ma non abilitare l'elemento di input.

$('#dis').click(function() { 
 
    $('#inp').attr('disabled', 'true'); 
 
}); 
 

 
$('#enb').click(function() { 
 
    $('#inp').attr('disabled', 'false'); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<input id='inp' type='text'> 
 
<button id='enb'>Enable</button> 
 
<button id='dis'>Disable</button>

+2

Non utente $().attr() utente $(). prop() invece. Vedi http://api.jquery.com/prop/ – Lacrioque

risposta

6

Solo per espandere sulla risposta ...

Il vero problema è che si sta cercando di impostare disabile su false tramite setAttribute() che non si comporta come vi aspettate. Un elemento è disabilitato se l'attributo disabled è impostato, indipendentemente dal valore quindi, disabled="true", e disabled="false" sono tutti equivalenti: l'elemento viene disabilitato).

È necessario rimuovere l'attributo invece completa

$('#enb').click(function() { 
    $('#inp').removeAttr('disabled'); 
}); 
3

è sufficiente rimuovere l'attributo disabled

$('#enb').click(function() { 
    $('#inp').removeAttr('disabled'); 
}); 
+0

Questa non è una buona pratica. dalla documentazione: 'Non utilizzare questo metodo per rimuovere proprietà native come selezionato, disabilitato o selezionato. – Selfish

+0

perché no? qualche intuizione @ NitaiJ.Perez? – dorado

+0

@anurageldorado, i documenti menzionano che può rimuovere il prop/attr permanentemente, non permettendogli di essere reimpostato. – Selfish

2

È possibile utilizzare removeAttr()

$('#dis').click(function() { 
 
    $('#inp').attr('disabled', 'true'); 
 
}); 
 

 
$('#enb').click(function() { 
 
    $('#inp').removeAttr('disabled'); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<input id='inp' type='text'> 
 
<button id='enb'>Enable</button> 
 
<button id='dis'>Disable</button>

0

provare

$('#dis').click(function() { 
    $('#inp').attr('disabled', 'true'); 
}); 

$('#enb').click(function() { 
    $('#inp').removeAttr('disabled'); 
}); 

perché disable="disable" è uguale a se stessa disable

0

C'è un modo! È necessario rimuovere l'attributo disabilitato in questo modo:

$('#inp').removeAttr('disabled'); 
1

Hi Prova il codice qui sotto

C'è differenza tra valori e stringhe booleani invece di 'vero' uso vero senza preventivi

$('#dis').click(function() { 
 
    $('#inp').attr('disabled', true); 
 
}); 
 

 
$('#enb').click(function() { 
 
    $('#inp').attr('disabled', false); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<input id='inp' type='text'> 
 
<button id='enb'>Enable</button> 
 
<button id='dis'>Disable</button>

+1

Ancora, il metodo attr() non funziona con i valori booleani – Lacrioque

+0

@Lacrioque chi sta dicendo? – jlocker

+0

Documentazione online di Jquey: http://api.jquery.com/prop/ Vedere Attributi contro Proprietà – Lacrioque

3

Il problema era con il codice di dover true e false scritto tra virgolette, che li rende le stringhe invece di booleani. Nota che sia 'true' sia 'false' sono valori di verità, e quindi il tuo codice imposta il valore abilitato su true in entrambi i casi.

mi aspetto che la seguente lavorerà per voi, controllare il frammento così:

$('#dis').click(function() { 
 
    $("#inp").prop('disabled', true); 
 
}); 
 

 
$('#enb').click(function() { 
 
    $("#inp").prop('disabled', false); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<input id='inp' type='text'> 
 
<button id='enb'>Enable</button> 
 
<button id='dis'>Disable</button>

1
<scriptsrc="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
<input id='inp' type='text'> 
<button id='enb'>Enable</button> 
<button id='dis'>Disable</button> 
<script type="text/javascript"> 
    $(document).ready(function() { 

$("#dis").click(function() { 
    $('#inp').prop("disabled", true); 

}); 

$("#enb").click(function() { 
    $('#inp').prop("disabled", false); 
}); 

}); 
</script> 
Problemi correlati