Używam następującego oświadczenia, aby uczynić go tylko do odczytu, ale nie działa.
$('#cf_1268591').attr("readonly", "readonly");
Nie chcę, aby był wyłączony, chcę, aby był tylko do odczytu.
Używam następującego oświadczenia, aby uczynić go tylko do odczytu, ale nie działa.
$('#cf_1268591').attr("readonly", "readonly");
Nie chcę, aby był wyłączony, chcę, aby był tylko do odczytu.
Odpowiedzi:
$('#cf_1268591').attr("disabled", true);
lista rozwijana jest zawsze tylko do odczytu. co możesz zrobić, to wyłączyć
jeśli pracujesz z formularzem, wyłączone pola nie są przesyłane, więc użyj ukrytego pola do przechowywania wyłączonej wartości rozwijanej
prop()teraz używać .
Miałem ten sam problem, moim rozwiązaniem było wyłączenie wszystkich niewybranych opcji. Bardzo proste z jQuery:
$('option:not(:selected)').attr('disabled', true);
Edit => Jeśli masz wiele list rozwijanych na tej samej stronie, wyłącz wszystkie niewybrane opcje na select-ID, jak poniżej.
$('#select_field_id option:not(:selected)').attr('disabled', true);
$('option:not(:selected)').prop('disabled', true);
Oto czego szukasz:
$('#cf_1268591').attr("style", "pointer-events: none;");
Działa jak marzenie.
tabindex="-1"
Spróbuj tego ... bez wyłączania wybranej wartości.
$('#cf_1268591 option:not(:selected)').prop('disabled', true);
Mi to pasuje..
Wyłączyłbym pole. Następnie, gdy formularz zostanie przesłany, nie wyłączaj go. Moim zdaniem jest to łatwiejsze niż zajmowanie się ukrytymi polami.
//disable the field
$("#myFieldID").prop( "disabled", true );
//right before the form submits, we re-enable the fields, to make them submit.
$( "#myFormID" ).submit(function( event ) {
$("#myFieldID").prop( "disabled", false );
});
Ustawienie elementu z disablednie spowoduje przesłania danych, jednak selectelementy nie mają readonly.
Można symulować readonlyna selectza pomocą CSS i JS do stylizacji, aby zapobiec zmianom w zakładce:
select[readonly] {
background: #eee;
pointer-events: none;
touch-action: none;
}
Następnie użyj go tak:
var readonly_select = $('select');
$(readonly_select).attr('readonly', true).attr('data-original-value', $(readonly_select).val()).on('change', function(i) {
$(i.target).val($(this).attr('data-original-value'));
});
Wynik:
Proste jquery, aby usunąć niewybrane opcje.
$('#your_dropdown_id option:not(:selected)').remove();
Aby uprościć sprawę, oto wtyczka jQuery, która robi to bez kłopotów: https://github.com/haggen/readonly
Ta linia powoduje zaznaczenia z readonlyatrybutem tylko do odczytu:
$('select[readonly=readonly] option:not(:selected)').prop('disabled', true);
Ten kod najpierw zapisze oryginalny wybór w każdym menu rozwijanym. Następnie, jeśli użytkownik zmieni wybór, zresetuje listę rozwijaną do pierwotnego wyboru.
//store the original selection
$("select :selected").each(function(){
$(this).parent().data("default", this);
});
//change the selction back to the original
$("select").change(function(e) {
$($(this).data("default")).prop("selected", true);
});
Najłatwiejszą opcją dla mnie było wybranie jako tylko do odczytu i dodanie:
onmousedown="return false" onkeydown="return false"
Nie musisz pisać żadnej dodatkowej logiki. Brak ukrytych danych wejściowych lub wyłączone, a następnie ponownie włączone po przesłaniu formularza.
To stary artykuł, ale chcę ostrzec ludzi, którzy go znajdą. Uważaj na wyłączony atrybut z elementem pobranym po nazwie. Dziwne, ale wydaje się, że nie działa.
to nie działa:
<script language="JavaScript">
function onChangeFullpageCheckbox() {
$('name=img_size').attr("disabled",$("#fullpage").attr("checked"));
</script>
ta praca:
<script language="JavaScript">
function onChangeFullpageCheckbox() {
$('#img_size').attr("disabled",$("#fullpage").attr("checked"));
</script>
Tak, wiem, że powinienem użyć prop, a nie attr, ale przynajmniej teraz prop nie będzie działał z powodu starej wersji jquery, a teraz nie mogę go zaktualizować, nie pytaj dlaczego ... różnica HTML jest tylko dodana id:. ..
<select name="img_size" class="dropDown" id="img_size">
<option value="200">200px
</option><option value="300">300px
</option><option value="400">400px
</option><option value="500">500px
</option><option value="600" selected="">600px
</option><option value="800">800px
</option><option value="900">900px
</option><option value="1024">1024px
</option></select>
<input type="checkbox" name="fullpage" id="fullpage" onChange="onChangeFullpageCheckbox()" />
...
Nie znalazłem żadnych błędów w skrypcie, aw wersji z nazwą nie było błędów w konsoli. Ale oczywiście może to być mój błąd w kodzie
Widziane na: Chrome 26 na Win 7 Pro
Przepraszam za złą gramatykę.
Odkryłem, że lepszym sposobem na to jest użycie CSS do usunięcia zdarzeń wskaźników i zmodyfikowania krycia na liście rozwijanej (spróbuj 0.5). Dzięki temu użytkownik ma wrażenie, że jest normalnie wyłączony, ale nadal publikuje dane.
To prawda, że ma to pewne problemy z kompatybilnością wsteczną, ale moim zdaniem jest lepszą opcją niż obejście irytującego problemu z wyłączonymi / tylko do odczytu.
Działa bardzo dobrze
$('#cf_1268591 option:not(:selected)').prop('disabled', true);
Dzięki temu widzę opcje, ale nie mogę ich wybrać
Nie ma listy rozwijanej tylko do odczytu. To, co możesz zrobić, to zresetować go do pierwszej wartości ręcznie po każdej zmianie.
$("select").change(function(event) {
$(this).val($(this).find("option").first().val());
});
$("select").change(), jak na przykład jsfiddle.net/4aHcD/20
Html to:
<input id="cf_1268591" style="width:60px;line-height:16px;border:1px solid #ccc">
Jquery to:
$("#cf_1268591").combobox({
url:"your url",
valueField:"id",
textField:"text",
panelWidth: "350",
panelHeight: "200",
});
// po wpisaniu klucza z pustym ciągiem
var tb = $("#cf_1268591").combobox("textbox");
tb.bind("keyup",function(e){
this.value = "";
});
Może możesz spróbować w ten sposób
function myFunction()
{
$("select[id^=myID]").attr("disabled", true);
var txtSelect = $("select[id^=myID] option[selected]").text();
}
Spowoduje to ustawienie pierwszej wartości listy rozwijanej jako domyślnej i wydaje się, że jest ona przeznaczona tylko do odczytu
HTML5 obsługujący:
`
$("#cCity").attr("disabled", "disabled");
$("#cCity").addClass('not-allow');
`
Oto niewielka wariacja na temat innych odpowiedzi, które sugerują użycie wyłączonych. Ponieważ atrybut „disabled” może mieć w rzeczywistości dowolną wartość i nadal jest wyłączony, można ustawić go jako tylko do odczytu, na przykład disabled = „readonly”. Spowoduje to normalne wyłączenie kontrolki, a także pozwoli Ci łatwo nadać jej styl inny niż zwykłe wyłączone kontrolki, z CSS takimi jak:
select[disabled=readonly] {
.... styles you like for read-only
}
Jeśli chcesz przesłać dane, użyj ukrytych pól lub włącz je przed przesłaniem, jak opisano w innych odpowiedziach.
Jak powiedział @Kanishka, jeśli wyłączymy element formularza, nie zostanie on przesłany. Utworzyłem fragment opisujący ten problem. Gdy element select jest wyłączony, tworzy ukryte pole wejściowe i przechowuje wartość. Gdy jest włączony, usuwa utworzone ukryte pola wejściowe.
jQuery(document).ready(function($) {
var $dropDown = $('#my-select'),
name = $dropDown.prop('name'),
$form = $dropDown.parent('form');
$dropDown.data('original-name', name); //store the name in the data attribute
$('#toggle').on('click', function(event) {
if ($dropDown.is('.disabled')) {
//enable it
$form.find('input[type="hidden"][name=' + name + ']').remove(); // remove the hidden fields if any
$dropDown.removeClass('disabled') //remove disable class
.prop({
name: name,
disabled: false
}); //restore the name and enable
} else {
//disable it
var $hiddenInput = $('<input/>', {
type: 'hidden',
name: name,
value: $dropDown.val()
});
$form.append($hiddenInput); //append the hidden field with same name and value from the dropdown field
$dropDown.addClass('disabled') //disable class
.prop({
'name': name + "_1",
disabled: true
}); //change name and disbale
}
});
});
/*Optional*/
select.disabled {
color: graytext;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form action="#" name="my-form">
<select id="my-select" name="alpha">
<option value="A">A</option>
<option value="B">B</option>
<option value="C">C</option>
</select>
</form>
<br/>
<button id="toggle">toggle enable/disable</button>