【问题标题】:Readonly listbox in html without disabling [duplicate]html中的只读列表框而不禁用[重复]
【发布时间】:2014-07-03 21:35:50
【问题描述】:

请参考此链接

Demo

请帮助我将此列表框设为只读。请不要使用禁用属性,因为我需要稍后发布。

 <select size=4 multiple="multiple">
    <option selected=selected>Volvo</option>
    <option selected=selected>Saab</option>
    <option selected=selected>Mercedes</option>
    <option selected=selected>Audi</option>
  </select>

【问题讨论】:

  • 只读是什么意思?你的意思是它应该表现得好像被禁用,而不使用 disabled 属性?
  • 如果数据不应该被交互,不要将其设为select。只是显示它。如果您需要随表单发布的静态值,请使用 input type="hidden" 或将其包含在表单的操作路径中。 (注意:这两个选项确实都允许精明的用户更改值。如果用户不得更改值,则将其保留在服务器端。)
  • 嗨 Tintyethan,是的....你是对的。

标签: html


【解决方案1】:

您为什么不禁用此功能并添加一个&lt;input type="hidden"&gt;,其中包含您需要发布的信息?

显然这不是很清楚,所以:

<script>

    var selectVal = $("#select_user > option[selected]").val();

    $("#select_post").val(selectVal);

</script>

<select disabled id="select_user">
    <option>Option 1</option>
    <option selected>Option 2</option>
    <option>Option 3</option>
</select>

<input type="hidden" name="select_post" id="select_post">

现在用户可以看到选择,但该值在隐藏输入中复制,然后发送到操作文件。值得庆幸的是,由于选择永远不会改变,你不必对.change()做任何事情

【讨论】:

  • 我需要向用户显示这些值
  • 禁用的输入仍然可读...
  • 我知道禁用!=隐藏但我们可以发布禁用的吗??
  • 用示例编辑了答案
【解决方案2】:

该元素没有可用的只读属性,并且禁用该字段不是一个选项,因为我们需要服务器端的值。一些简单的 javascript 完成了这项工作:

你可以试试这个脚本

<select size=4 multiple="multiple" onchange="this.selectedIndex = 1">
  <option selected="selected">Volvo</option>
  <option selected="selected">Saab</option>
  <option  selected="selected">Mercedes</option>
  <option  selected="selected">Audi</option>
</select>

只有当您的意思是用户应该能够看到列表中的所有值并且不能选择新值时,这才会起作用。

Demo

【讨论】:

  • 如果你可以投反对票,那么也可以发表评论!你不是吗?
  • 嘿,不是我。事实上,我不想对任何答案投反对票,因为所有人都在帮助我!!.. 事实上,我刚刚投了票。所以现在它是中立的。
  • @shrikanth 我知道,但我的评论是针对投反对票的人!
  • 感谢您的回复。我想要这样的东西......当页面加载时,所有值都被选中,并且不应允许用户进行任何选择更改。但是您的演示默认为索引 1 一如既往
【解决方案3】:

据我所知,选择框不存在只读。

就最佳实践而言,如果您不需要更改数据,则不应将其设为表单元素。如果你只是为了得到某种显示而将它做成一个表单元素,使用 CSS 让它看起来像一个表单元素。

另外,如果不应该更改数据,最好不要将其与表单一起发送。可以轻松禁用 Javascript。

CSS

ul.fake_select{
        list-style-type:none;
        color:#000000;
        overflow-y:scroll;
        width:100px;
        height:auto;  /* If you have lots of options, put a fixed value */
        padding:0;
}
ul.fake_select li{
        margin:0;
        background:#3399FF;
        color:#FFFFFF;
}

HTML

<ul class="fake_select">
    <li>Volvo</li>
    <li>Saab</li>
    <li>Mercedes</li>
    <li>Audo</li>
</ul>

【讨论】:

  • 感谢您的帮助。我正在使用嵌入 php 的 html 创建列表框运行时。因此,如果您按照之前给出的方式修改我的代码,那就太好了
  • 对不起,我不明白你的意思。不管你用什么语言输出你的html,都不会改变我给你的解决方案。
【解决方案4】:
   <select size=4 multiple="multiple" onchange="this.selectedIndex=this.defaultIndex;">
  <option selected="selected">Volvo</option>
  <option selected="selected" >Saab</option>
  <option  selected="selected" >Mercedes</option>
  <option  selected="selected" >Audi</option>
</select>

演示:-

http://jsfiddle.net/2gmKY/2/

【讨论】:

  • 对不起尼尔。它允许用户进行选择。谢谢
  • 我已经更新了@shrikanth
  • Neel,感谢您帮助我。我检查了您提交的小提琴。第一次选择所有列表框值。但是,当用户单击任何值时,它只会选择第一个值。我的要求是当用户单击这些值中的任何一个时,不应更改原始选择的值。(意味着它应该像以前一样选择所有值)
  • 对不起@shrikanth 我没有得到你
  • 尼尔,这是我的观察。第一次加载页面时,所有值都被选中。当用户单击这些值中的任何一个时,只会选择第一个值。但我想像以前一样选择所有值
猜你喜欢
  • 2019-11-13
  • 1970-01-01
  • 2013-09-24
  • 1970-01-01
  • 2011-11-04
  • 1970-01-01
  • 1970-01-01
  • 2023-02-06
  • 1970-01-01
相关资源
最近更新 更多