Javascript 在select语句中定义函数并用作onchange,而不是直接使用.change(函数)

Javascript 在select语句中定义函数并用作onchange,而不是直接使用.change(函数),javascript,Javascript,在select语句中定义函数并将其用作onchange,而不是直接使用.change(函数)有什么不对 我想用它来显示一个不同的组合框: function MetricLayerShowHide (){ var type = $(this).val(); if( type !==''){ $('.content').hide(); $('#'+t

在select语句中定义函数并将其用作onchange,而不是直接使用.change(函数)有什么不对

我想用它来显示一个不同的组合框:

     function MetricLayerShowHide (){           
            var type = $(this).val();
              if( type !==''){
                 $('.content').hide();
                 $('#'+type).show();
              }
      }


<select name="MetricType" id="MetricType" onchange="MetricLayerShowHide();" >
    <option value=CD>CD</option>
     <option value=HT>HT</option>
     <option value=Profile>Profile</option>
  </select>

   <div id="CD" style ="display: none" class ="content">
       <SELECT NAME="LayerList" id="layer1">
      </SELECT>
    </div>
但这是可行的


我哪里出错了?

问题是调用函数时,
这个
不再是元素。您正在全局上下文中调用函数,因此
将是函数中的
窗口
对象

您可以使用调用函数,将元素作为上下文:

onchange="MetricLayerShowHide.call(this);"

演示:

问题很简单:
不再指调用函数时所需的元素

HTML:

CSS:

JSFiddle演示

另一方面,这是基于您作为注释发布的JSFIDLE。您因缺少括号而创建了新问题


请更新您的问题,因为这个答案在上下文中没有意义@Guffa实际上正确地回答了你的问题。

我们不知道,因为你没有告诉我们你预期会发生什么,而是发生了什么。“我想使用这个”甚至没有明确提到问题。如果我要使用这个函数,将显示一个新的组合框。这是不可能的。我已将其更改为MetricLayerShowHide.call(this)@PSDebugger:当我尝试它时,它是有效的。我添加了一个指向演示的链接。是的,这是可行的,但与我的情况不同,我正在尝试替换这种类型的函数。这个问题有什么不对。你应该编辑你的答案并把JSFIDLE放在那里。@PSDebugger如果你需要更新你的问题来澄清,那么就更新它。否则,对你和其他试图帮助你的人来说,答案就没有意义了。
onchange="MetricLayerShowHide.call(this);"
<form>
    <select name="MetricType" id="MetricType" >
    <option value=CD>CD</option>
    <option value=HT>HT</option>
    <option value=Profile>Profile</option>
</select>
</form>

<div class="content" id="CD">CD</div>
<div class="content" id="HT">HT</div>
<div class="content" id="Profile">Profile</div>
$(function(){
        $('#MetricType').change(function(){
           var type = $(this).val();
              if( type !==''){
                 $('.content').hide();
                 $('#'+type).show();

              }});
     });
.content { display: none; }