2013-07-26 11 views
5

po wybraniu wartości z listy rozwijanej, jeśli wybrane wartości są równe określonej wartości, chcę, aby menu rozwijane zostało zmienione na tylko do odczytu, w jaki sposób mogę to zrobić?javascript do ustawiania atrybutu readonly na zmianie wartości rozwijanej

HTML:

<select id="s_id"> 
    <option value="volvo">Volvo</option> 
    <option value="saab">Saab</option> 
    <option value="opel">Opel</option> 
    <option value="audi">Audi</option></select> 

Scenariusz:

$(document).ready(function() { 
    $("#s_id").change(function() { 
    var x = $(this).val(); 
    //alert("something's changed"); 
    alert($(this).val()); 
    if (x === opel) { 
     alert("iff only....."); 
     $(this).attr("readOnly", "true"); 
    } 
    }); 
}); 

Fiddle: http://jsfiddle.net/L4reds/xKQUd/2/

+2

Po pierwsze, musisz dodać cytaty wokół warunku wartości: 'if (x ===" opel ") ...'. Po drugie i co ważniejsze, elementów 'select' nie można wprowadzać' tylko do odczytu'. Mogą być "wyłączone", ale ich wartość nie zostanie przesłana z danymi formularza. –

+1

Czy "tylko do odczytu" oznacza, że ​​nie można wybrać wartości? –

+0

Twoja linia 'if (x == opel) {', zmienna 'opel' jest _undefined_. Prawdopodobnie chcesz porównać z _String_; 'if (x == 'opel') {' –

Odpowiedz

10

trzeba porównać x na ciąg "opel" i można użyć atrybutu disabled patrz skrzypce tutaj : http://jsfiddle.net/xKQUd/3/

Dla wyjaśnienia: select elementy nie mogą być ustawione na readOnly, trzeba użyć atrybutu disabled

obejść nie może wysyłać do wydania serwera ustaw ukryte wejście równą wartości niepełnosprawnej, która zostanie wysłana na przesyłanie formularza zamiast zobaczyć tę skrzypce tutaj: http://jsfiddle.net/xKQUd/25/

+2

Istnieje jednak większe zagadnienie, że elementu 'select' nie można wprowadzić' readonly'. –

+0

Dlatego też powiedziałem, że mam użyć wyłączonego atrybutu – verbanicm

+2

Ale to będzie znaczyło, że wybrana wartość nigdy nie zostanie wysłana na serwer, co może być sprzeczne z tym, co wymaga OP. "wyłączone" nie jest wykonalną alternatywą. –

1

Select nie ma atr ReadOnly - zamiast tego może być disabled tak kod:

$(document).ready(function() { 
    $("#s_id").change(function() { 
     var x = $(this).val(); 
     //alert("something's changed"); 
     alert($(this).val()); 
     alert("x=======" +x); 
     if (x == "opel") { 
      alert("iff"); 
      // $(this).attr("readOnly", "true"); 
      $(this).attr('disabled',true); 
     } 
    }); 
}); 

btw open nie jest zmienny, ale wartość, więc musi być w cudzysłowach "opel" i skrzypce: http://jsfiddle.net/xKQUd/5/

0

Spróbuj

if (x == 'opel') { 
     alert("iff"); 
     $(this).attr("disabled", "true"); 
    } 

FIDDLE Demo

0

Spróbuj tego,

if (x == "opel") { 

      $(this).attr("disabled", "disabled"); 
     } 
2

W swoim kodzie użyłeś opel jako variable. ale nie jest to variable to jest string. Więc musisz wziąć jako ciąg (w pojedynczym lub podwójnym cudzysłowie).

$(document).ready(function() { 
    $("#s_id").change(function() { 
     var x = $(this).val();    
     alert($(this).val()); 
     alert("x=======" +x); 
     if (x == "opel") { 
      alert("iff"); 
      $(this).attr("disabled", "disabled"); 
     } 
    }); 
}); 

Try this jsfiddle

lub wziąć zmienny var opel = "opel";.

Try jsfiddle

1

Select elementy nie mogą być ustawione readonly, ale może być disabled zamiast. Ale w tym przypadku ich wartość nie zostanie przesłana z form.

Masz dwie opcje tutaj.

Jednym z nich jest ustawienie hidden input z wybranej wartości, a następnie wyłączyć select:

$(document).ready(function() { 
    $("#s_id").on("change", function() { 
     if ($(this).val() === "opel") { 
      $("#myHiddenField").val($(this).val()); 
      $(this).attr("disabled", "disabled"); 
     } 
    }); 
}); 

Drugi, to usunąć wszystkie inne opcje z select, pozostawiając tylko wybrany jeden dostępny:

$(document).ready(function() { 
    $("#s_id").on("change", function() { 
    if ($(this).val() === "opel") { 
     $(this).children("option").each(function() { 
      if (this.value != "opel") 
       this.remove(); 
     }); 
    } 
    }); 
}); 

To zależy od Ciebie.

0

Spróbuj poniższy kod:

<select id="s_id"> 
<option value="volvo">Volvo</option> 
<option value="saab">Saab</option> 
<option value="opel">Opel</option> 
<option value="audi">Audi</option> 
</select> 

kod jQuery:

$(document).ready(function() { 
$("#s_id").change(function() { 
var x = $(this).val();  
if (x == 'opel') { 
    $(this).attr('disabled','disabled'); 
} 
}); 
}); 

http://jsfiddle.net/Ea6NN/

0

Tutaj jesteś http://jsfiddle.net/SteveRobertson/xKQUd/24/

 $(document).ready(function() { 
      y=1; 
      $("#s_id").change(function() { 
      var x = $(this).val(); 
    //alert("something's changed"); 


      if (x == "opel" && x!=y) {   
       y=x; 
       $("#s_id").prop("disabled", true).change();    
    } 
}); 

});

Powiązane problemy