Как сделать выпадающий список только для чтения с помощью jQuery?
Я использую следующую инструкцию, чтобы сделать его только для чтения, но он не работает.
$('#cf_1268591').attr("readonly", "readonly");
Я не хочу отключать его, я хочу сделать его только для чтения.
18 ответов:
$('#cf_1268591').attr("disabled", true);
выпадающее меню всегда доступно только для чтения . что вы можете сделать, это сделать его инвалидом
Если вы работаете с формой , отключенные поля не отправляются , поэтому используйте скрытое поле для хранения отключенного выпадающего значения
У меня была та же проблема, мое решение состояло в том, чтобы отключить все не выбранные параметры. Очень легко с помощью jQuery:
$('option:not(:selected)').attr('disabled', true);
попробуйте этот.. без отключения выбранного значения..
$('#cf_1268591 option:not(:selected)').prop('disabled', true);
это работает для меня..
установка элемента с
disabled
не будет представлять данные, однакоselect
элементы не имеютreadonly
.вы можете имитировать
readonly
onselect
использование CSS для стилизации и JS для предотвращения изменений с помощью tab:select[readonly] { background: #eee; pointer-events: none; touch-action: none; }
тогда используйте его как:
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')); });
результат:
// Updated 08/2018 to prevent changing value with tab $('a').on('click', function() { 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')); }); });
select[readonly] { background: #eee; pointer-events: none; touch-action: none; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <a href="#">Click here to enable readonly</a> <select> <option>Example 1</option> <option selected>Example 2</option> <option>Example 3</option> </select>
Я бы сделал поле отключено. Затем, когда форма будет отправлена, сделайте ее не отключенной. На мой взгляд, это проще, чем иметь дело со скрытыми полями.
//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 ); });
чтобы упростить вещи вот плагин jQuery, который делает это без хлопот:https://github.com/haggen/readonly
этот код сначала сохранит исходный выбор в каждом раскрывающемся списке. Затем, если пользователь изменит выбор, он сбросит выпадающий список до исходного выбора.
//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); });
Я нашел, лучший способ сделать это-использовать CSS для удаления указателей-событий и изменения непрозрачности в раскрывающемся списке (попробуйте 0.5). Это дает пользователю вид, что он отключен как обычно, но по-прежнему публикует данные.
конечно, у этого есть некоторые проблемы с обратной совместимостью, но, на мой взгляд, это лучший вариант, чем обойти раздражающую проблему с отключением/только для чтения.
вы также можете отключить его и в тот момент, когда вы делаете отправить вызов включить его. Я думаю, что это самый простой способ:)
нет такой вещи, как выпадающее меню только для чтения. Что вы можете сделать, это сбросить его до первого значения вручную после каждого изменения.
$("select").change(function(event) { $(this).val($(this).find("option").first().val()); });
Это старая статья, но я хочу предупредить людей, которые ее найдут. Будьте осторожны с отключенным атрибутом с полученным элементом по имени. Странно, но это, кажется, не слишком работает.
это не работает:
<script language="JavaScript"> function onChangeFullpageCheckbox() { $('name=img_size').attr("disabled",$("#fullpage").attr("checked")); </script>
эту работу:
<script language="JavaScript"> function onChangeFullpageCheckbox() { $('#img_size').attr("disabled",$("#fullpage").attr("checked")); </script>
Да, я знаю, что мне лучше использовать prop, а не attr, но по крайней мере теперь prop не будет работать из-за старой версии jquery, и теперь я не могу обновить его, не спрашивайте почему... разница HTML-код добавляется только идентификатор: ...
<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()" />
...
Я не нашел никаких ошибок в скрипте, и в версии с именем, не было никаких ошибок в консоли. Но, конечно, это может быть моя ошибка в коде
видно на: Chrome 26 на Win 7 Pro
извините за плохую грамматику.
попробуйте сделать пустую строку, когда "нажатие клавиши вверх"
Html-Это:
<input id="cf_1268591" style="width:60px;line-height:16px;border:1px solid #ccc">
Jquery это:
$("#cf_1268591").combobox({ url:"your url", valueField:"id", textField:"text", panelWidth: "350", panelHeight: "200", });
// сделать после того, как клавиша вверх с пустой строкой
var tb = $("#cf_1268591").combobox("textbox"); tb.bind("keyup",function(e){ this.value = ""; });
как сказал @ Kanishka, если мы отключим элемент формы, он не будет отправлен . Я создал фрагмент для этой проблемы . Когда элемент select отключен, он создает скрытое поле ввода и сохраняет значение . Когда он включен, он удаляет созданные скрытые поля ввода .
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>
его работа очень хорошо
$('#cf_1268591 option:not(:selected)').prop('disabled', true);
С этим я могу видеть варианты, но я не могу выбрать его