jQuery .on没有开火

时间:2013-04-08 17:56:21

标签: javascript jquery forms

我有以下代码(在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
        }
    });
});

6 个答案:

答案 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条件内的代码是相同的......所以你不会注意到差异......在你的小提琴中检查

working fiddle example

答案 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("-");的方式。