实现CSS - 选择在DOM中没有名称或适当的值

时间:2016-08-24 18:33:07

标签: javascript html css materialize

我无法理解如何实现CSS <select>标记的实现。

在常规HTML选择标记中,您需要插入name=""属性,并为每个选项添加value=""属性,这在物化CSS中似乎缺失。

此代码:

<div class="input-field col s12">
  <select>
    <option value="" disabled selected>Choose your option</option>
    <option value="1">Option 1</option>
    <option value="2">Option 2</option>
    <option value="3">Option 3</option>
  </select>
  <label>Materialize Select</label>
</div>

在DOM中呈现:

<div class="input-field col s12 m6">
  <div class="select-wrapper"><span class="caret">▼</span>
    <input class="select-dropdown" readonly="true" data-activates="select-options-273ec07d-e7c4-e689-e2e3-6a57ff2f6293" value="Choose your option" type="text">
    <ul style="width: 296px; position: absolute; top: 0px; left: 0px; opacity: 1; display: none;" id="select-options-273ec07d-e7c4-e689-e2e3-6a57ff2f6293" class="dropdown-content select-dropdown">
      <li class="disabled"><span>Choose your option</span></li><li class="active selected"><span>Option 1</span></li><li class=""><span>Option 2</span></li>
      <li class=""><span>Option 3</span></li>
    </ul>
    <select class="initialized">
          <option value="" disabled="" selected="">Choose your option</option>
          <option value="1">Option 1</option>
          <option value="2">Option 2</option>
          <option value="3">Option 3</option>
    </select>
  </div>
  <label>Materialize Select</label>
</div>

我遇到的问题:

  1. 在哪里以及如何设置该select元素的名称(在呈现的input元素中相应地表示)?
  2. 值是列表中显示的文本。我希望有不同于显示字符串的值,例如:
  3. <option value="1">regular style</option> <option value="2">bold style</option> <option value="3">italic style</option>

    提前感谢所有人:)

2 个答案:

答案 0 :(得分:1)

像大多数其他库一样,物化句柄<select>替换;遵循标准HTML约定,例如name="foo"<option value="A">But I'm showing other text here</option>

在创建更漂亮,更实用的表单时,输出会考虑这些。

注意:Materialize CSS文档确实显示<select>标记,但没有大多数常见元素(例如name=""),但我认为这更能提供最清晰的内容,最简单的代码可能。

答案 1 :(得分:1)

让我向您展示一个向物化 css 选择添加名称的示例

如果您的 html 表明这一点

<div class="col s3">
    <span class="required"></span>
    <select id="piezas" name="piezas" class="validate">
        <option value="-1" disabled selected>Elija Pieza</option>
        <option value="1">Tornillo</option>
        <option value="2">Clavo</option>
        <option value="3">Cable</option>
    </select>
</div> 

您的选择将被转换并显示在 dom 中

<div class="col s3">
    <span class="required"></span>
    <div class="select-wrapper valid">
        
        <input class="select-dropdown dropdown-trigger" type="text" readonly="true" data-target="select-options-9e9993fe-936f-86eb-22f5-ec638cf0121d" name="piezas-materialize" aria-invalid="false">
        
        <ul id="select-options-9e9993fe-936f-86eb-22f5-ec638cf0121d" class="dropdown-content select-dropdown" tabindex="0">
            <li class="disabled selected" id="select-options-9e9993fe-936f-86eb-22f5-ec638cf0121d0" tabindex="0">
                <span>Elija Pieza</span>
            </li>
            <li id="select-options-9e9993fe-936f-86eb-22f5-ec638cf0121d1" tabindex="0">
                <span>Tornillo</span>
            </li>
            <li id="select-options-9e9993fe-936f-86eb-22f5-ec638cf0121d2" tabindex="0">
                <span>Clavo</span></li>
            <li id="select-options-9e9993fe-936f-86eb-22f5-ec638cf0121d3" tabindex="0">
                <span>Cable</span>
            </li>
        </ul>

        <svg class="caret" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg">
            <path d="M7 10l5 5 5-5z"></path><path d="M0 0h24v24H0z" fill="none"></path>
        </svg>

        <select id="piezas" name="piezas" class="validate ignore" tabindex="-1">
            <option value="-1" disabled="" selected="">Elija Pieza</option>
            <option value="1">Tornillo</option>
            <option value="2">Clavo</option>
            <option value="3">Cable</option>
        </select>
    </div>
</div>

要向此选择添加名称,请使用以下 JavaScript 代码迭代所有这些并添加自定义名称。 请记住,您需要在名称中添加后缀以避免在多次选择中使用相同的名称

    let allSelects = $('.select-dropdown.dropdown-trigger');    
    for (i = 0; i < allSelects .length; i++) {
        let item = $(allSelects[i]);
        let name= item.parent().children()[3].name;
        item.attr("name", name + '-materialize');  // change -materialize for the sufix you like  
    }