简体   繁体   English

更改所选值时显示输入

[英]On change of a selected value show an input

I am trying to choose yes value in this dropdown, so I can show another input field to add discount. 我试图在此下拉列表中选择“是”值,因此我可以显示另一个输入字段以增加折扣。

I am trying but nothing is showing. 我正在尝试,但是什么也没显示。 Can you please help me? 你能帮我么?

<div class="form-group m-form__group row">

  <select class="form-control m-input" name="is_offer" id="is_offer" onclick="myFunction()" required>
  <option value="" disabled selected >--Choose--</option>
  <option value="yes" >Yes</option>
  <option value="no">No</option>
  </select>

</div>

<div id="offer"></div>

<script>
  function myFunction() {
    if (document.getElementById('is_offer').value = 'yes') {
      document.getElementById('offer').innerText = '<div class="form-group m-form__group row"> <label class="col-xl-3 col-lg-3 col-form-label">* Discount::</label> <div class="col-xl-9 col-lg-9"> <div id="asd"></div> </div> </div>';

    }
  }

</script>

 function myFunction() { if (document.getElementById('is_offer').value = 'yes') { document.getElementById('offer').innerText = '<div class="form-group m-form__group row"> <label class="col-xl-3 col-lg-3 col-form-label">* Discount::</label> <div class="col-xl-9 col-lg-9"> <div id="asd"></div> </div> </div>'; } } 
 <div class="form-group m-form__group row"> <select class="form-control m-input" name="is_offer" id="is_offer" onclick="myFunction()" required> <option value="" disabled selected>--Choose--</option> <option value="yes">Yes</option> <option value="no">No</option> </select> </div> <div id="offer"></div> 

Your condition statement has issues. 您的条件声明有问题。 Use document.getElementById('is_offer').value === 'yes' (triple-equals) 使用document.getElementById('is_offer')。value ==='是'(三等号)

Use .innerHTML to set the div not innerText . 使用.innerHTML设置div而不是innerText innerText assumes all your html data is text and adds it like a text. innerText假定您所有的html数据都是文本,并将其像文本一样添加。 ,For the yes condition, = is used for assignment but we have to compare so == is used. ,对于yes条件, =用于分配,但我们必须进行比较,以便使用== And call the function on onchange event not on click of the select tag 并在onchange事件上调用该函数,而不是click select标记

 function myFunction() { if( document.getElementById('is_offer').value=='yes') { document.getElementById('offer').innerHTML='<div class="form-group m-form__group row"> <label class="col-xl-3 col-lg-3 col-form-label">* Discount::</label> <div class="col-xl-9 col-lg-9"> <div id="asd"></div> </div> </div>'; } else document.getElementById('offer').innerHTML='' } 
 <div class="form-group m-form__group row"> <select class="form-control m-input" name="is_offer" id="is_offer" onChange="myFunction()" required> <option value="" disabled selected >--Choose--</option> <option value="yes" >Yes</option> <option value="no">No</option> </select> </div> <div id="offer"></div> 

function myFunction()
    {
       if (document.getElementById('is_offer').value === 'yes')
       {
           document.getElementById('offer').innerHTML = '<div class="form-group m-form__group row"> <label class="col-xl-3 col-lg-3 col-form-label">* Discount::</label> <div class="col-xl-9 col-lg-9"> <div id="asd"></div></div></div>';
       }
    }

and change onclick with onChange . 并使用onChange更改onclick

You had 3 issues should be changed. 您有3个问题应更改。

  1. If you want to listen the change of input, you shoule use onchange instead of onclick . 如果您想听输入的更改,则应该使用onchange而不是onclick

  2. In if condition you use assigning variables instead of comparison (use == or === ). if条件中,您使用分配变量而不是比较(使用===== )。

  3. It seems you would like to change HTML content. 看来您想更改HTML内容。 So you should use innerHTML instead of innerText . 因此,您应该使用innerHTML而不是innerText

After fixing all of them we have code like this: 修复所有问题后,我们将得到如下代码:

<div class="form-group m-form__group row">

    <select class="form-control m-input" name="is_offer" id="is_offer" onchange="myFunction()" required>
        <option value="" disabled selected>--Choose--</option>
        <option value="yes">Yes</option>
        <option value="no">No</option>
    </select>

</div>


<div id="offer"></div>


<script>
    function myFunction() {
        if (document.getElementById('is_offer').value === 'yes') {
            document.getElementById('offer').innerHTML = '<div class="form-group m-form__group row"> <label class="col-xl-3 col-lg-3 col-form-label">* Discount::</label> <div class="col-xl-9 col-lg-9"> <div id="asd"></div> </div> </div>';
        }
    }
</script>

Prefer to use the onchange event on the select tag. 最好在select标签上使用onchange事件。 Also, you should use === to compare the value with yes or no , not just = whish is an assignment. 另外,您应该使用===将值与yesno进行比较,而不仅仅是= whish是一个赋值。

By using a template and cloning it, you don't have to mix your JavaScript with HTML code, you just have to fetch the template, clone it and append it to your div . 通过使用模板并将其克隆,您不必将JavaScript与HTML代码混合使用,只需要获取模板,克隆并将其附加到div

Do not query the document to find your select in your handler, you have access to it via the event.target object, which you get access to as argument to your handler. 不要查询文档以在处理程序中找到您的选择,您可以通过event.target对象访问它,您可以将其作为处理程序的参数进行访问。

Also, don't forget to erase the discount when you select no . 另外,当您选择no时,请不要忘记删除折扣。

 function onSelect(event) { const offer = document.getElementById('offer'); offer.innerHTML = ''; if (event.target.value === 'yes') { const tpl = document.getElementById('discount-tpl'); const clone = document.importNode(tpl.content, true); offer.appendChild(clone); } } 
 <div class="form-group m-form__group row"> <select class="form-control m-input" name="is_offer" id="is_offer" onchange="onSelect(event)" required> <option value="" disabled selected >--Choose--</option> <option value="yes" >Yes</option> <option value="no">No</option> </select> </div> <div id="offer"></div> <template id="discount-tpl"> <div class="form-group m-form__group row"> <label class="col-xl-3 col-lg-3 col-form-label">* Discount::</label> <div class="col-xl-9 col-lg-9"> <div id="asd"></div> </div> </div> </template> 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM