简体   繁体   English

onchange =“”在选择标记中不起作用

[英]onchange=“” doesn't work in select tag

I have two tags of select. 我有两个选择标签。 Their IDs is "study-phase" and "study-year". 他们的ID是“研究阶段”和“研究年份”。 I want when the value of study phase to process a CSS code. 我想在学习阶段的价值时处理CSS代码。

HTML: HTML:

<select name="study-phase" onchange="myFunction()" id="study-phase" class="sp-input">
    <option value=""></option>
    <option id="pri" value="pri">Primary</option>
    <option id="pre" value="pre">Prep</option>
    <option id="sec" value="sec">Secondary</option>
</select>   
<select name="study-year" id="study-year" class="sp-input">
    <option value=""></option>
    <option id="a" value="aa">Grade 1</option>
    <option id="b" value="">Grade 2</option>
    <option id="c" value="">Grade 3</option>
    <option id="d" value="">Grade 4</option>
    <option id="e" value="">Grade 5</option>
    <option id="f" value="">Grade 6</option>
    <option id="g" value="">Grade 7</option>
    <option id="h" value="">Grade 8</option>
    <option id="i" value="">Grade 9</option>
    <option id="j" value="">Grade 10</option>                       
</select>
<style type="text/css">
    #a , #b , #c , #d , #f , #g , #h , #j , #k , #e , #i {
        display: none;
    }
</style>

JS: JS:

$(function(myFunction()){
   if (document.getElementById("study-phase").value == "pri") {
       document.getElementById("a").style.display = "block";
   }
});

And after run the code the css code which I want don't launch. 运行代码后,我不希望启动的CSS代码。 What's the problem here ? 这是什么问题?

$(function(myFunction()){
    if (document.getElementById("study-phase").value == "pri") {
        document.getElementById("a").style.display = "block";
    }});

give error 给出错误

Uncaught SyntaxError: Unexpected token (

apart if you revised your code as below it works, as it is vanillaJs you dont need jquery 另外,如果您按以下方式修改代码,则可以正常工作,因为它是vanillaJs,因此不需要jquery

 function myFunction() { if (document.getElementById("study-phase").value == "pri") { document.getElementById("a").style.display = "block"; } }; 
 <select name="study-phase" onchange="myFunction()" id="study-phase" class="sp-input"> <option value=""></option> <option id="pri" value="pri">Primary</option> <option id="pre" value="pre">Prep</option> <option id="sec" value="sec">Secondary</option> </select> <select name="study-year" id="study-year" class="sp-input"> <option value=""></option> <option id="a" value="aa">Grade 1</option> <option id="b" value="">Grade 2</option> <option id="c" value="">Grade 3</option> <option id="d" value="">Grade 4</option> <option id="e" value="">Grade 5</option> <option id="f" value="">Grade 6</option> <option id="g" value="">Grade 7</option> <option id="h" value="">Grade 8</option> <option id="i" value="">Grade 9</option> <option id="j" value="">Grade 10</option> </select> <style type="text/css"> #a, #b, #c, #d, #f, #g, #h, #j, #k, #e, #i { display: none; } </style> 

HTML 的HTML

<select name="study-phase" onchange="myFunction()" id="study-phase" class="sp-input">
    <option value=""></option>
    <option id="pri" value="pri">Primary</option>
    <option id="pre" value="pre">Prep</option>
    <option id="sec" value="sec">Secondary</option>
</select>
<select name="study-year" id="study-year" class="sp-input">
    <option value=""></option>
    <option id="a" value="aa">Grade 1</option>
    <option id="b" value="">Grade 2</option>
    <option id="c" value="">Grade 3</option>
    <option id="d" value="">Grade 4</option>
    <option id="e" value="">Grade 5</option>
    <option id="f" value="">Grade 6</option>
    <option id="g" value="">Grade 7</option>
    <option id="h" value="">Grade 8</option>
    <option id="i" value="">Grade 9</option>
    <option id="j" value="">Grade 10</option>                       
</select>
<style type="text/css">
  #a,
  #b,
  #c,
  #d,
  #f,
  #g,
  #h,
  #j,
  #k,
  #e,
  #i {
    display: none;
  }
</style>

JS: JS:

function myFunction(){
     console.log("myFunction gets called");
    if (document.getElementById("study-phase").value == "pri") {
        document.getElementById("a").style.display = "block";
    }}

Just declare your function like this. 只需这样声明您的函数。 And add a console.log to make sure that function is getting called "onchange" or not, which is after this change. 并添加console.log以确保该功能是否在此更改之后被称为“ onchange”。

Try using the .change() event : 尝试使用.change()事件:

HTML 的HTML

<select name="study-phase" id="study-phase" class="sp-input">
    <option value=""></option>
    <option id="pri" value="pri">Primary</option>
    <option id="pre" value="pre">Prep</option>
    <option id="sec" value="sec">Secondary</option>
</select>   
<select name="study-year" id="study-year" class="sp-input">
    <option value=""></option>
    <option id="a" value="aa">Grade 1</option>
    <option id="b" value="">Grade 2</option>
    <option id="c" value="">Grade 3</option>
    <option id="d" value="">Grade 4</option>
    <option id="e" value="">Grade 5</option>
    <option id="f" value="">Grade 6</option>
    <option id="g" value="">Grade 7</option>
    <option id="h" value="">Grade 8</option>
    <option id="i" value="">Grade 9</option>
    <option id="j" value="">Grade 10</option>                       
</select>

JS JS

 $(function(){
   $('#study-phase').change(function(){
     if ($("#study-phase").val() == "pri") {
        $("#a").css('display','block');
     }
   });

 });

Your JavaScript isn't valid. 您的JavaScript无效。

Moreover, I think you want to one of the option in the second dropdown once you make change in the first. 而且,我认为一旦在第一个下拉列表中进行更改,您便希望在第二个下拉列表中选择一个选项。

You can build on this logic further 您可以进一步建立这种逻辑

Here is a sample minimal code: 这是一个示例最小代码:

 function myFunction() { if (document.getElementById("study-phase").value == "pri") document.getElementById("study-year").value = "aa"; }; 
 <select name="study-phase" onchange="myFunction()" id="study-phase" class="sp-input"> <option value=""></option> <option id="pri" value="pri">Primary</option> <option id="pre" value="pre">Prep</option> <option id="sec" value="sec">Secondary</option> </select> <select name="study-year" id="study-year" class="sp-input"> <option value=""></option> <option id="a" value="aa">Grade 1</option> <option id="b" value="">Grade 2</option> <option id="c" value="">Grade 3</option> <option id="d" value="">Grade 4</option> <option id="e" value="">Grade 5</option> <option id="f" value="">Grade 6</option> <option id="g" value="">Grade 7</option> <option id="h" value="">Grade 8</option> <option id="i" value="">Grade 9</option> <option id="j" value="">Grade 10</option> </select> 

You can do something like this instead: 您可以改为执行以下操作:

 $(document).ready(function() { $("#study-phase").on("change", function() { if (document.getElementById("study-phase").value === "pri") { $('option#a').show(); } }); }); 
 #a, #b, #c, #d, #f, #g, #h, #j, #k, #e, #i { display: none; } 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <select name="study-phase" id="study-phase" class="sp-input"> <option value=""></option> <option id="pri" value="pri">Primary</option> <option id="pre" value="pre">Prep</option> <option id="sec" value="sec">Secondary</option> </select> <select name="study-year" id="study-year" class="sp-input"> <option value=""></option> <option id="a" value="aa">Grade 1</option> <option id="b" value="">Grade 2</option> <option id="c" value="">Grade 3</option> <option id="d" value="">Grade 4</option> <option id="e" value="">Grade 5</option> <option id="f" value="">Grade 6</option> <option id="g" value="">Grade 7</option> <option id="h" value="">Grade 8</option> <option id="i" value="">Grade 9</option> <option id="j" value="">Grade 10</option> </select> 

You need to define the function before calling it, 您需要先定义函数,然后再调用它,

For example, in the first select (example 1) im calling a function that isn't defined yet and nothing happens (see console for error) 例如,在第一个选择(示例1)中,im调用了一个尚未定义的函数,并且什么也没有发生(请参见控制台以获取错误)

in the second select (example 2) i define it first then call it. 在第二个选择(示例2)中,我先定义它,然后调用它。

This makes for a messy html layout with random scripts in it, so instead, you can use jquery to listen for the event (example 3). 这将导致杂乱的html布局中包含随机脚本,因此,您可以使用jquery监听事件(示例3)。

$('.myselect').change(function(){})

Examples: https://jsfiddle.net/hbmrktbj/ 范例: https//jsfiddle.net/hbmrktbj/

To done this jquery will be more efficient so you just need to do some thing like this:- 要做到这一点,jQuery将更加高效,因此您只需要执行以下操作即可:-

1.Remove onchange="myFunction()" form your select 1.从您的选择中删除onchange =“ myFunction()”

2.Add this code on your script:- 2.将此代码添加到脚本中:

 $('#study-phase').on('change',function(){
 if ($(this).val() == "pri") {
    $("#a")css('display','block');
 }});

It will work fine 会很好的

I guess what you want is that when you select the value pri in the first select the second take the value aa. 我想您想要的是,当您在第一个中选择值pri时,第二个选择值aa。 As you use jquery I'll give you an example. 当您使用jquery时,我将举一个例子。

 $( document ).ready(function() {
  $("#study-phase").change(function(){
  if($(this).val() === "pri")
    {
       $("#study-year").val("aa");
    }
  });
})

https://codepen.io/anon/pen/VWLaqv https://codepen.io/anon/pen/VWLaqv

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

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