jQuery deshabilita y habilita según la opción seleccionada

Pasé por muchos foros y usé la forma sugerida de hacerlo, pero parece que no funciona. Así que estoy buscando un segundo par de ojos que me ayuden a descubrir lo que hice mal.

Este es un cms que genera el formulario y simplemente estoy escribiendo un script para hacer el resto. De acuerdo con el cms para fines de jQuery, puedo intercambiar el nombre y la identificación. A continuación, mostraré mi código jQuery y luego la pieza que estoy tratando de manipular. El formulario ya deshabilita el cuadro de texto, simplemente no lo vuelve a habilitar después de seleccionar la opción.

<script type="text/javascript">  
  $(document).ready(function() 
  {
    $("input:text[name=Other]").attr("disabled", true);
      $("select[name=School[]]").change(function() 
      {
      var chk= $(this).val();
        if (chk == 'Other') 
        {
          $("input:text[name=Other]").attr("disabled", false);
        }
      });
  });
</script>

<form id="ouforms" name="ouforms" method="post" class="ldpforms">    
  <select name="School[]">
    <option value="PleaseSelect" checked="checked">(Please Select)</option>
    <option value="BeachPublicSchools">Beach Public Schools</option>
    <option value="BelfieldPublicSchools">Belfield Public Schools</option>
    <option value="BillingsCountyPublicSchools">Billings County Public Schools</option>
    <option value="BowmanCountyPublicSchools">Bowman County Public Schools</option>
    <option value="DakotaHorizonYouthCenter">Dakota Horizon Youth Center</option>
    <option value="DickinsonAdultLearningCenter">Dickinson Adult Learning Center</option>
    <option value="DickinsonCatholicSchools">Dickinson Catholic Schools</option>
    <option value="DickinsonStateUniversityStudents">Dickinson State University Students</option>
    <option value="EarlyChildhoodLeft">Early Childhood Left</option>
    <option value="GlenUllinPublicSchools">Glen Ullin Public Schools</option>
    <option value="HallidayPublicSchools">Halliday Public Schools</option>
    <option value="HebronPublicSchools">Hebron Public Schools</option>
    <option value="HettingerPublicSchools">Hettinger Public Schools</option>
    <option value="HopeChristianAcademy">Hope Christian Academy</option>
    <option value="KilldeerPublicSchools">Killdeer Public Schools</option>
    <option value="LoneTreeGolvaPublicSchools">Lone Tree (Golva) Public Schools</option>
    <option value="MottRegentPublicSchools">Mott/Regent Public Schools</option>
    <option value="NewEnglandPublicSchools">New England Public Schools</option>
    <option value="RichardtonTaylorPublicSchools">Richardton  Taylor Public Schools</option>
    <option value="ScrantonPublicSchools">Scranton Public Schools</option>
    <option value="SouthHeartPublicSchools">SouthHeart Public Schools</option>
    <option value="SWCHS">SWCHS</option>
    <option value="TwinButtesPublicSchools">Twin Buttes Public Schools</option>
    <option value="WestRiverSpecialServices">West River Special Services</option>
    <option value="Other">Other</option>
  </select>
  <br/>
  <label for="Other">Other: </label>
  <input type="text" name="Other" value=""/>
</form>

preguntado el 03 de mayo de 12 a las 17:05

4 Respuestas

debe usar: var chk= $(this).find(':selected').val();

contestado el 03 de mayo de 12 a las 17:05

Eso no es necesario. Su código ($(this).val()) obtiene el valor correcto. - j08691

si, tienes razón No me di cuenta de que jquery deduciría el valor del elemento principal. ¡Frio! - Pete Lada

Por alguna razón, el change el enlace del evento no es exitoso. Cuando trató de violín su código, no estaba funcionando.

Entonces acabo de cambiar select[name=School[]] a select[name='School[]'] (ver las comillas simples), se empieza a trabajo.

No estoy seguro de por qué, estas citas hacen que el selector sea válido. Porque, en algún lugar, he leído que sin comillas, el selector de atributos debería funcionar bien.

De todos modos, yo también aprendí algo hoy.

Gracias.

contestado el 03 de mayo de 12 a las 18:05

oh, déjame probar esa solución porque ha estado actuando raro. Pero entonces, ¿qué hay de incrustar... las comillas simples dentro de comillas simples? - Paradigma

No, puedo ser comillas simples con comillas dobles $("select[name='School[]']") o comillas dobles con comillas simples $('select[name="School[]"]'). - usuario405398

Deseaba que esto funcionara... todavía no se desactiva, lo cual es raro - Paradigma

Qué tal esto:

$("input:text[name=Other]").attr("disabled", true);
$('select[name="School[]"]').change(function() {
    $("input:text[name=Other]").attr("disabled", ($(this).val() == 'Other') ? false : true);
});​

Esto cambiará el atributo deshabilitado de la entrada de texto en función de si la opción "Otro" está seleccionada o no.

ejemplo de jsFiddle.

contestado el 03 de mayo de 12 a las 17:05

Incluso se puede simplificar a, $("input:text[name=Other]").attr("disabled", ($(this).val() != 'Other')); - usuario405398

funcionó como un poco y luego se detuvo misteriosamente. Lo probé con solo tener $("input:text[name=Other]").attr("disabled", true); Y lo deshabilitó. Creo que algo está jodiendo después de eso. alguna pista? - Paradigma

@Robertpurpose- ¿Tienes otro JavaScript en esta página? - j08691

no, todo es en realidad todo lo demás a lo que se hace referencia. Por ejemplo, tenemos una búsqueda que llama a un script, etc. Paradigma

Hmmm, bueno, puedes ver en el ejemplo de jsFiddle que el código funciona. ¿Recibes algún error cuando ejecutas el código? - j08691

Hola y antes que nada quería agradecerte Robertpurpose por tu código, y los demás por supuesto. Probé tu código tal como está pero no pasó nada... así que verifiqué si no era un problema con mi versión de jquery u otros scripts... pero de nuevo nada... luego jugué y descubrí que funcionaba si elimine el [] de la instrucción select... de la siguiente manera: select[name='School']

Espero que esto ayude a alguien más...

Respondido el 30 de diciembre de 12 a las 06:12

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.