Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何制作html<;选择>;元素看起来像;残疾人士;,但是传递值呢?_Html_Select_Disabled Input - Fatal编程技术网

如何制作html<;选择>;元素看起来像;残疾人士;,但是传递值呢?

如何制作html<;选择>;元素看起来像;残疾人士;,但是传递值呢?,html,select,disabled-input,Html,Select,Disabled Input,当我禁用一个 <select name="sel" disabled> <option>123</option> </select> 123 元素,它不传递其变量 如何使其看起来像已禁用,但处于“正常”状态 这是因为我有一个“选择”列表,有时它们中的一些只有一个值,所以用户应该理解它只有一个值,而无需单击它。添加一个类。禁用并使用此CSS: ​.disabled {border: 1px solid #999; color: #333

当我禁用一个

<select name="sel" disabled>
    <option>123</option>
</select>

123
元素,它不传递其变量

如何使其看起来像已禁用,但处于“正常”状态


这是因为我有一个“选择”列表,有时它们中的一些只有一个值,所以用户应该理解它只有一个值,而无需单击它。

添加一个类
。禁用
并使用此CSS

​.disabled {border: 1px solid #999; color: #333; opacity: 0.5;}
.disabled option {color: #000; opacity: 1;}​

演示:您可以根据需要将其禁用,然后在提交表单之前删除disabled属性

$('#myForm').submit(function() {
    $('select').removeAttr('disabled');
});
请注意,如果您依赖于此方法,您还需要以编程方式禁用它,因为如果JS被禁用或不受支持,您将无法使用禁用的select

$(document).ready(function() {
    $('select').attr('disabled', 'disabled');
});

如果可以为所选内容提供默认值,则可以对未选中的复选框使用相同的方法,该方法要求在实际元素之前隐藏输入,因为如果未选中,这些复选框不会发布值:

<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)禁用了select,或者即使您的代码编写了html,使用属性:disabled=“disabled”禁用元素本身,这实际上会发布值“default”(显然不带引号)。您可以使用与禁用列表具有相同名称和值的其他隐藏输入元素。这将确保在$\u POST变量中传递该值

例如:

123

哇,我也遇到了同样的问题,但一行代码解决了我的问题。我写

$last_child_topic.find( "*" ).prop( "disabled", true );
$last_child_topic.find( "option" ).prop( "disabled", false );   //This seems to work on mine
我将表单发送到一个php脚本,然后它打印每个选项的正确值,而之前它是“null”


告诉我这是否可行。我想知道这是否只对我的类有效。

我的解决方案是在CSS中创建一个禁用类:

.disabled {
    pointer-events: none;
    cursor: not-allowed;
}
然后您可以选择:

<select name="sel" class="disabled">
    <option>123</option>
</select>

123

用户将无法选择任何值,但select值仍将在表单提交时传递。

如果不想添加attr disabled,可以通过编程方式执行此操作

可以使用以下代码禁用
元素中的编辑:

//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);
  });


如果您想试试,可以在这里看到:

他们聚焦元素还不够吗,请查看单个选项,然后接受只有一个选项?如果他们无法对元素执行任何操作,只需使用带有
只读属性的常规
输入
,或隐藏输入。如果只有一个选项,为什么需要在表单中?另外,请注意,并非无知的用户将能够轻松更改选择值。@WebnetMobile.com:我很高兴,但不知道是什么it@EL2002,听起来像是依靠表单返回所需的特定值。您是否认为用户可以发送该元素中的任何值?经常检查你的表格。如果只有一个可能的值,您根本不应该关心它:程序将自动填充它,因为它不允许选择任何其他值!有时OP的请求是完美的理想行为。例如,通常有许多选项可用,但表单上其他选项的某些组合只允许1个特定选项。选择选项并禁用控件将远远优于其他javascript诡计。Praveen,thanx,我已经尝试过了,它足够方便,但是“select”有打开列表的箭头,并且在禁用状态下为灰色。而且没有启用。对不起,我的错。更新了答案@EL2002请看一看。Thanx,但它看起来不像是禁用的,抱歉=(这似乎是唯一的解决方案。@EL2002如果您真的对仅包含一个选项的选择行为不满意,那么我可以想象的唯一其他解决方案是使用CSS来模拟禁用的外观,正如Praveen所建议的那样,当您将其禁用时,用户将无法提交数据。这对您合适吗?这是严格意义上的禁止在表单中包含禁用表单字段的HTML标准submission@EL2002我不明白。上面的解决方案应该可以很好地工作。这更好,因为它不需要在提交前禁用取消设置。注意,您需要添加
。而不是(“:selected”)
在设置属性以保持所选项目处于启用状态之前。这不是一个解决方案,但它是一个替代方案。通过这种方式,您仍然可以导航到“使用选择”选项卡,然后使用键盘上/下箭头键更改其所选选项。此外,IE不支持
指针事件
,您仍然可以使用鼠标导航。认为这是一个错误更好的办法是解决公认的答案1.有人反对吗?
<select name="sel" class="disabled">
    <option>123</option>
</select>
//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);
  });