-3

我有以下代码(在此 jsFiddle中转载)不起作用。类型选择框中有三个选项。如果选择了第一个(真/假),我需要显示第一个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
        }
    });
});
4

6 回答 6

4

Uncaught TypeError: Cannot call method 'split' of undefined.

更改$(this).name.split("-");this.name.split("-");

于 2013-04-08T18:00:10.283 回答
4

它不是,on但是 split 函数给你错误,你试图获取不可用的 jquery 对象的名称方法......你需要使用attr()从 jquery 对象中获取名称......或者使用thisDOM 对象得到名字

试试这个

 var arr = $(this).attr('name').split("-");

或者

 var arr=this.name.split('_');

注意 if/else 条件中的两个代码都是相同的..所以你不会注意到差异..在你的小提琴中检查一下

工作小提琴示例

于 2013-04-08T18:00:51.277 回答
3

它 100% 会触发,你有一个$(this).name未定义的错误。我想你真正想做的是this.name

jQuery 对象的行为与 DOMElement 对象不同,即它们没有相同的属性(如.name)。下一次,当你试图找出为什么某些东西不起作用时,打开你的 Web 控制台,你就会发现大部分问题。

于 2013-04-08T18:00:33.083 回答
2

这条线是你的问题:

var arr = $(this).name.split("-");

on工作正常,但上面的行抛出异常。

var arr = $(this).attr("name").split("-");

有几种方法可以解决这个问题,上面是一个例子。

于 2013-04-08T18:00:13.063 回答
1

您的问题是尝试访问$(this)未定义的内容时。

试试this

this.name.split("-");
于 2013-04-08T18:02:27.933 回答
1

name不是有效的属性。而是使用id或更改您访问它的方式var arr = $(this).attr('name').split("-");

于 2013-04-08T18:06:38.933 回答