我刚开始学习JS和jQuery并且有一个问题。我想制作一个动态形式,它可以与多个选择器复杂化。问题是当我打开Option1然后按下选项6和7的另一个选择器时它会消失,但我希望它可见。我知道问题是$('label')。hide();但我对jQuery和Jscript非常苛刻,我不知道如何使这项工作。我很感激任何帮助。
以下是代码:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<script type="text/javascript">
$(function() {
$('label').hide();
$('#sel').change(function() {
var val = $(this).val();
$('label').hide();
switch (val){
case 'option1':
$('#label1').show();
break;
case 'option2':
$('#label2').show();
break;
case 'option3':
$('#label3').show();
break;
case 'option4':
$('#label4').show();
break;
case 'option5':
$('#label5').show();
break;
}
});
$('#sel2').change(function() {
var val = $(this).val();
$('label').hide();
switch (val){
case 'option6':
$('#label6').show();
break;
case 'option7':
$('#label7').show();
break;
}
});
$("input")
.focus(function () {
$(this).next("span").fadeIn(1000);
})
.blur(function () {
$(this).next("span").fadeOut(1000);
});
});
</script>
<style>
label {
display:block;
}
</style>
</head>
<body>
<form>
<select id="sel">
<option value="">- select -</option>
<option value="option1">Option 1</option>
<option value="option2">Option 2</option>
<option value="option3">Option 3</option>
<option value="option4">Option 4</option>
<option value="option5">Other</option>
</select>
<label id="label1">
<select id="sel2">
<option value="">- select -</option>
<option value="option6">Option 6</option>
<option value="option7">Option 7</option>
</select>
</label>
<label id="label2" for="option2">Text box label 2
<input type="text" id="option2" />
</label>
<label id="label3" for="option3">Text box label 3
<input type="text" id="option3" />
</label>
<label id="label4" for="option4">Text box label 4
<input type="text" id="option4" />
</label>
<label id="label5" for="option5">Other
<input type="text" id="option5" />
</label>
<label id="label6" for="option6">Text box label 6
<input type="text" id="option6" />
</label>
<label id="label7" for="option8">Text box label 7
<input type="text" id="option7" />
</label>
</form>
</body>
</html>
答案 0 :(得分:1)
您可以使用slice()
方法尝试以下操作:
$('#sel').change(function() {
var val = this.value.slice(-1); // 1,2,3..
$('label').slice(0, 4).hide();
$('#label'+val).show()
});
答案 1 :(得分:1)
当你调用#sel2时,你每次都会隐藏'label'(包括它自己)。我会改为:
$('#sel2').change(function() {
var val = $(this).val();
$('#label6').hide();
$('#label7').hide();
switch (val){
case 'option6':
$('#label6').show();
break;
case 'option7':
$('#label7').show();
break;
}
});
答案 2 :(得分:1)
只需一个更改功能就可以这样做
$('#sel,#sel2').change(function() {
var $selIndex = $('#sel > option:selected').index(); // <-- store index of first select
var val = $(this).val().replace('option', ''); // <-- remove options from id
var $label = $('#label' + val); // <-- use number from options to get correct label
$('label').not($label).hide(); // <-- hide all labels but current selected
$('#label1').toggle($selIndex == 1); // <-- show if first select = option1
$label.show(); // <-- show current selected
});