我有以下代码(在this jsFiddle中复制)无效。 “类型”选择框中有三个选项。如果选择了第一个(True / False),我需要显示第一个div
,如果选择了第二个或第三个选项,则需要显示第二个div
。这段代码有什么问题?
HTML:
<form name="editform">
Selector: <select class="selectors" name="1-type" id="1-type">
<option value="tf" selected="selected">True/False</option>
<option value="rd">Radio Button</option>
<option value="chk">Checkboxes</option>
</select>
<div id="seldiv-1">
Good Value: <select name="1-good_value" id="1-good_value">
<option value="true">True</option>
<option value="false">False</option>
</select>
</div>
<div id="textdiv-1" style="display:none;" disabled="disabled">
Good Value:
<textarea name="1-good_value" id="1-good_value"></textarea>
</div>
</form>
使用Javascript:
$(document).ready(function(){
$('.selectors').on('change',function (){
var arr = $(this).name.split("-");
var id = arr[0];
var val = $(this).val();
if(val=="tf") {
$('#textdiv-'+id).hide();
$('#seldiv'+id).show();
//Make textarea disabled
//Make selection enabled
} else {
$('#textdiv-'+id).hide();
$('#seldiv'+id).show();
//Disable selection
//Enable textarea
}
});
});
答案 0 :(得分:4)
Uncaught TypeError: Cannot call method 'split' of undefined.
将$(this).name.split("-");
更改为this.name.split("-");
答案 1 :(得分:4)
它不是on
但是split函数给你错误,你试图得到jquery对象的name方法,这个方法不可用......要么你需要使用attr()
来从jquery对象获取名称。或使用this
DOM对象获取名称
试试这个
var arr = $(this).attr('name').split("-");
或
var arr=this.name.split('_');
请注意,如果/ else条件内的代码是相同的......所以你不会注意到差异......在你的小提琴中检查
答案 2 :(得分:3)
100%会触发,您在$(this).name
未定义时出错。我认为你真正想做的是this.name
jQuery对象的行为与DOMElement对象不同,即它们没有相同的属性(如.name
)。下次,在尝试找出无法解决的问题时打开您的Web控制台,您将在那里发现大部分问题。
答案 3 :(得分:2)
这一行是你的问题:
var arr = $(this).name.split("-");
on
工作正常,但上面的行正在抛出异常。
var arr = $(this).attr("name").split("-");
有几种方法可以解决这个问题,上面就是一个例子。
答案 4 :(得分:1)
您的问题是在尝试访问未定义的$(this)
时。
只需尝试this
this.name.split("-");
答案 5 :(得分:1)
name
不是有效的属性。而是使用id
或更改您访问var arr = $(this).attr('name').split("-");
的方式。