未捕获的引用错误:未定义函数

时间:2013-06-24 12:12:42

标签: javascript jquery

我有一些简单的代码用于我的第一个jquery脚本之一,我试图调用它的函数,但它一直说该函数不存在!我检查了拼写,我确信之前有这个工作,但我不知道发生了什么变化。

这是我的代码:http://jsfiddle.net/spadez/6LLpC/

这就是我调用我的功能的方式:

jQuery(function($){
applyField();
});

有人能告诉我哪里出错吗?

3 个答案:

答案 0 :(得分:5)

applyField未定义,因为jsFiddle将您的代码包装在onload事件处理程序中。因此该函数仅在此事件处理程序中可见。

在左侧菜单中选择"no wrap - in <head>"

enter image description here

或者,您也可以通过此事件处理程序调用您的函数,这将更加一致。

请注意,调用该函数是不够的。如果您希望事件绑定生效,请更改

$(this).on('change', '#apply',function() {

$(document.body).on('change', '#apply',function() {

Demonstration

答案 1 :(得分:1)

修复onload问题后,您的第二个问题是this不是您函数中<select>元素的父级。要使用.on的样式,您需要传入您要定位的元素的父级(可以是文档)。

更改自:

$(this).on('change', '#apply',function() {

要:

$(document).on('change', '#apply',function() {

另外,为了防止隐藏所有输入,我建议使用类而不是选择$('input')。见小提琴。

Updated fiddle

答案 2 :(得分:1)

Approach - 1 => Click here for Demo

<强> JQuery的

$(document).ready(function(){
applyField();
});

// Apply Fields
function applyField() {
    $(this).on('change', '#apply',function() {
        var selected = $(this).find(':selected').val(),
            elem = $("#"+selected);
        $("input").addClass('hidden');
        elem.removeClass('hidden');
        $(".donthide").show();
    });
    $("#apply").trigger('change');
};

Approach - 2=> Click here for Demo

<强> JQuery的

在DOM准备好之后执行该函数需要

on。检查演示。

$(document).ready(function () {
    $(this).on('change', '#apply',function() {
        var selected = $(this).find(':selected').val(),
            elem = $("#"+selected);
        $("input").addClass('hidden');
        elem.removeClass('hidden');
        $(".donthide").show();
    });
    $("#apply").trigger('change');
});