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