Javascript:用于创建隐藏输入表单的替代或不太复杂的代码

时间:2017-12-06 20:21:55

标签: javascript jquery html css

我请求您帮助改进我创建的表单,请记住我不是javascript编程方面的优秀专家。

我需要创建一个酒店搜索引擎,可以选择房间总数。根据所选房间的数量,将显示许多隐藏的表单字段,其中包含其他选择字段。

为了更好地了解我创造的内容,我附上了一个屏幕。

enter image description here

要查看与所选房间数相关的隐藏字段,我使用了此javascript代码,重复了5次(最多房间数)。

function admSelectCheck(nameSelect)
{
console.log(nameSelect);
if(nameSelect){
    admOptionValue = document.getElementById("room1").value;
    if(admOptionValue == nameSelect.value){
        document.getElementById("pax_room_1").style.display = "block";
    }
    else{
        document.getElementById("pax_room_1").style.display = "none";
    }
}
else{
    document.getElementById("pax_room_1").style.display = "none";
}

为了实现选择每个房间的选项,我使用这个javascript代码重复与房间号码成比例。那就是:1个房间 - >输入代码1一次; 2个房间 - >输入代码2次;等

function childSelect(nameSelect)
{
console.log(nameSelect);
if(nameSelect){
    admOptionValue = document.getElementById("child1").value;
    if(admOptionValue == nameSelect.value){
        document.getElementById("agechild1").style.display = "block";
    }
    else{
        document.getElementById("agechild1").style.display = "none";
    }
 }
 else{
    document.getElementById("agechild1").style.display = "none";
 }

 if(nameSelect){
    admOptionValue = document.getElementById("child2").value;
    if(admOptionValue == nameSelect.value){
        document.getElementById("agechild2").style.display = "block";
    }
    else{
        document.getElementById("agechild2").style.display = "none";
    }
}
else{
    document.getElementById("agechild2").style.display = "none";
}

if(nameSelect){
    admOptionValue = document.getElementById("child3").value;
    if(admOptionValue == nameSelect.value){
        document.getElementById("agechild3").style.display = "block";
    }
    else{
        document.getElementById("agechild3").style.display = "none";
    }
}
else{
    document.getElementById("agechild3").style.display = "none";
}
}

$(function(){
     $(':submit').click(function(){
          $('select').each(function(){
              if ( $(this).val() == '' )
              {
                  $(this).remove(); // or 
$(this).attr('disabled','disabled');
              }
          });
     });
});

虽然,我以同样的方式重复使用这个HTML代码。

<div class="container_hidden">


    <div id="pax_room_1" style="display:none;" class="row_hidden">

        <div class="nrRoom" style="width: 100px;background: #f5a445;font-size: 15px;text-align: center;height: 30px; padding-top: 5px; border-radius: 10px 10px 0px 0px;"><font color="#000"><img src="images/family-room.png" alt="Icon Family Room" style="width: 19px;" /> Room 1</font></div>

            <div class="column"><font color="#000">Adult (18+)</font>
                <select id="adulti" name="nrAdult">
                    <option value="">-</option>
                    <option value="1">1</option>
                    <option value="2">2</option>
                    <option value="3">3</option>
                    <option value="4">4</option>
                    <option value="5">5</option>
                    <option value="6">6</option>        
                </select>
            </div>          
            <div class="column"><font color="#000">Children (0-17)</font>
                <select id="nrchild" name="nrChild" onchange="childSelect(this);">
                    <option value="">-</option>
                    <option id="child1" value="1">1</option>
                    <option id="child2" value="2">2</option>
                    <option id="child3" value="3">3</option>
                </select>
            </div>

                        <!-- Select Bambino 1 -->
                        <div id="agechild1" style="display:none;" class="row_hidden">
                        <div class="column"><font color="#000"> Child Age 1 </font>
                        <select id="child1" name="ageChild1">
                        <option value="">-</option>
                        <option value="1">1</option>
                        <option value="2">2</option>
                        <option value="3">3</option>
                        <option value="4">4</option>
                        <option value="5">5</option>
                        <option value="6">6</option>
                        <option value="7">7</option>
                        <option value="8">8</option>
                        <option value="9">9</option>
                        <option value="10">10</option>
                        <option value="11">11</option>
                        <option value="12">12</option>
                        <option value="13">13</option>
                        <option value="14">14</option>
                        <option value="15">15</option>
                        <option value="16">16</option>
                        <option value="17">17</option>
                        </select>
                        </div>
                        </div>

                        <!-- Select Bambino 1-2 -->
                        <div id="agechild2" style="display:none;" class="row_hidden">
                        <div class="column"><font color="#000"> Child Age 1 </font>
                        <select id="child1" name="ageChild1">
                        <option value="">-</option>
                        <option value="1">1</option>
                        <option value="2">2</option>
                        <option value="3">3</option>
                        <option value="4">4</option>
                        <option value="5">5</option>
                        <option value="6">6</option>
                        <option value="7">7</option>
                        <option value="8">8</option>
                        <option value="9">9</option>
                        <option value="10">10</option>
                        <option value="11">11</option>
                        <option value="12">12</option>
                        <option value="13">13</option>
                        <option value="14">14</option>
                        <option value="15">15</option>
                        <option value="16">16</option>
                        <option value="17">17</option>
                        </select>
                        </div>
                        <div class="column"><font color="#000"> Child Age 2 </font>
                        <select id="child2" name="ageChild2">
                        <option value="">-</option>
                        <option value="1">1</option>
                        <option value="2">2</option>
                        <option value="3">3</option>
                        <option value="4">4</option>
                        <option value="5">5</option>
                        <option value="6">6</option>
                        <option value="7">7</option>
                        <option value="8">8</option>
                        <option value="9">9</option>
                        <option value="10">10</option>
                        <option value="11">11</option>
                        <option value="12">12</option>
                        <option value="13">13</option>
                        <option value="14">14</option>
                        <option value="15">15</option>
                        <option value="16">16</option>
                        <option value="17">17</option>
                        </select>
                        </div>
                        </div>

                        <!-- Select Bambino 1-2-3 -->
                        <div id="agechild3" style="display:none;" class="row_hidden">
                        <div class="column"><font color="#000"> Child Age 1 </font>
                        <select id="child1" name="ageChild1">
                        <option value="">-</option>
                        <option value="1">1</option>
                        <option value="2">2</option>
                        <option value="3">3</option>
                        <option value="4">4</option>
                        <option value="5">5</option>
                        <option value="6">6</option>
                        <option value="7">7</option>
                        <option value="8">8</option>
                        <option value="9">9</option>
                        <option value="10">10</option>
                        <option value="11">11</option>
                        <option value="12">12</option>
                        <option value="13">13</option>
                        <option value="14">14</option>
                        <option value="15">15</option>
                        <option value="16">16</option>
                        <option value="17">17</option>
                        </select>
                        </div>
                        <div class="column"><font color="#000"> Child Age 2 </font>
                        <select id="child2" name="ageChild2">
                        <option value="">-</option>
                        <option value="1">1</option>
                        <option value="2">2</option>
                        <option value="3">3</option>
                        <option value="4">4</option>
                        <option value="5">5</option>
                        <option value="6">6</option>
                        <option value="7">7</option>
                        <option value="8">8</option>
                        <option value="9">9</option>
                        <option value="10">10</option>
                        <option value="11">11</option>
                        <option value="12">12</option>
                        <option value="13">13</option>
                        <option value="14">14</option>
                        <option value="15">15</option>
                        <option value="16">16</option>
                        <option value="17">17</option>
                        </select>
                        </div>
                        <div class="column"><font color="#000"> Child Age 3 </font>
                        <select id="child3" name="ageChild3">
                        <option value="">-</option>
                        <option value="1">1</option>
                        <option value="2">2</option>
                        <option value="3">3</option>
                        <option value="4">4</option>
                        <option value="5">5</option>
                        <option value="6">6</option>
                        <option value="7">7</option>
                        <option value="8">8</option>
                        <option value="9">9</option>
                        <option value="10">10</option>
                        <option value="11">11</option>
                        <option value="12">12</option>
                        <option value="13">13</option>
                        <option value="14">14</option>
                        <option value="15">15</option>
                        <option value="16">16</option>
                        <option value="17">17</option>
                        </select>
                        </div>
                        </div>
    </div>

我意识到这太费力了,即使它有效。这就是为什么我问你是否有办法减轻代码。

1 个答案:

答案 0 :(得分:0)

您可以使用data-*属性动态选择html中的关系。

e.g。

(function() {
  const hiders = document.getElementsByClassName('hider');
  // const is ES6 syntax, you can use var, although you might want to read up on that

  for (let i = 0; i < hiders.length; ++i) {
    const hider = hiders[i];

    hider.onchange = function() {
      const hideTarget = hider.dataset.hideTarget; // this reads the value of data-hide-target

      if (hideTarget == null)
        return; // no target set (else we would potentially get an TypeError, when data-hide-target wasn't set. Still happens with an invalid value though, but there you want an error

      if (hider.value !== '')
        document.getElementById(hideTarget).style.display = "block";
      else
        document.getElementById(hideTarget).style.display = "none";
      // you might also want to take a look at .setAttribute("aria-hidden", "true") and .style.visibility = "hidden"
    };
  }
})()
<select id="adulti" name="nrAdult" class="hider" data-hide-target="hideme1">
    <option value="">-</option>
    <option value="1">1</option>
    <option value="2">2</option>
    <option value="3">3</option>
    <option value="4">4</option>
    <option value="5">5</option>
    <option value="6">6</option>        
</select>

<div id="hideme1" style="display: none;">
  Hide me 1
</div>

<select id="adulti2" name="nrAdult" class="hider" data-hide-target="hideme2">
    <option value="">-</option>
    <option value="1">1</option>
    <option value="2">2</option>
    <option value="3">3</option>
    <option value="4">4</option>
    <option value="5">5</option>
    <option value="6">6</option>        
</select>

<div id="hideme2" style="display: none;">
  Hide me 2
</div>

我认为这个片段很容易理解,但如果你想让我进一步详细说明,请随时提问。

仅供参考,在此示例中也可以使用它:

(function(){
  function makeOption(val) {
    const option = document.createElement('option');
    option.value = val;
    option.innerText = val;
    return option;
  }

  const simpleSelects = document.getElementsByClassName('simpleSelect');
  for(let i = 0; i < simpleSelects.length; ++i){
    const simpleSelect = simpleSelects[i];
    const min = simpleSelect.dataset.from;
    const max = simpleSelect.dataset.to;
    
    if(min == null || max == null)
      return;
      
    simpleSelect.appendChild(makeOption('-'));
    
    for (let j = min; j <= max; ++j) {
      simpleSelect.appendChild(makeOption(j));
    }
  }
})()
<select name="nrAdult" class="simpleSelect" data-from="0" data-to="5"></select>
<select name="nrChildren" class="simpleSelect" data-from="0" data-to="10"></select>

而且我也意识到你多次使用相同的id,这不仅是不允许的,而且也不起作用。

(是的,我知道这样做与你想要的完全不同,但它是相同的原则,我不想给你一个开箱即用的解决方案。)