8 回答
您可以根据需要将其禁用,然后在提交表单之前删除 disabled 属性。
$('#myForm').submit(function() {
$('select').removeAttr('disabled');
});
请注意,如果您依赖此方法,您还需要以编程方式禁用它,因为如果 JS 被禁用或不支持,您将被禁用选择卡住。
$(document).ready(function() {
$('select').attr('disabled', 'disabled');
});
<select id="test" name="sel">
<option disabled>1</option>
<option disabled>2</option>
</select>
或者你可以使用 jQuery
$("#test option:not(:selected)").prop("disabled", true);
我的解决方案是在 CSS 中创建一个禁用的类:
.disabled {
pointer-events: none;
cursor: not-allowed;
}
然后您的选择将是:
<select name="sel" class="disabled">
<option>123</option>
</select>
用户将无法选择任何值,但选择值仍将在表单提交时传递。
如果您可以为您的选择提供默认值,那么您可以对未选中的复选框使用相同的方法,这需要在实际元素之前隐藏输入,因为如果未选中,这些不会发布值:
<input type="hidden" name="myfield" value="default" />
<select name="myfield">
<option value="default" selected="selected">Default</option>
<option value="othervalue">Other value</option>
<!-- ... //-->
</select>
如果选择被 javascript(或 jQuery)禁用,或者即使您的代码编写的 html 使用属性禁用元素本身,这实际上会发布值“默认”(显然不带引号): disabled="disabled"。
添加一个类.disabled
并使用这个CSS:
.disabled {border: 1px solid #999; color: #333; opacity: 0.5;}
.disabled option {color: #000; opacity: 1;}
演示:http: //jsfiddle.net/ZCSRq/
可以使用与禁用列表具有相同名称和值的附加隐藏输入元素。这将确保值在 $_POST 变量中传递。
例如:
<select name="sel" disabled><option>123</select>
<input type="hidden" name="sel" value=123>
哇,我遇到了同样的问题,但是一行代码解决了我的问题。我写
$last_child_topic.find( "*" ).prop( "disabled", true );
$last_child_topic.find( "option" ).prop( "disabled", false ); //This seems to work on mine
我将表单发送到一个 php 脚本,然后它打印每个选项的正确值,而它之前是“null”。
告诉我这是否可行。我想知道这是否只对我有效。
如果您不想添加 attr disabled 可以以编程方式进行
可以使用以下代码将版本禁用到<select class="yourClass">
元素中:
//bloqueo selects
//block all selects
jQuery(document).on("focusin", 'select.yourClass', function (event) {
var $selectDiabled = jQuery(this).attr('disabled', 'disabled');
setTimeout(function(){ $selectDiabled.removeAttr("disabled"); }, 30);
});
如果你想试试,可以在这里看到:https ://jsfiddle.net/9kjqjLyq/