1

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

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

这就是我调用函数的方式:

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

谁能告诉我我哪里出错了?

4

3 回答 3

5

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

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

在此处输入图像描述

或者,您也可以从此事件处理程序中调用您的函数,这样会更加连贯。

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

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

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

示范

于 2013-06-24T12:14:45.940 回答
1

解决onload问题后,您的第二个问题this不是<select>您的函数中的元素的父级。为了使用这种风格,.on您需要传入您要定位的元素的父元素(可以是文档)。

更改自:

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

到:

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

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

更新的小提琴

于 2013-06-24T12:20:14.217 回答
1

方法 - 1 => 点击此处查看演示

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');
};

方法 - 2=> 点击此处查看演示

jQuery

onDOM准备好后需要执行该功能..检查演示。

$(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');
});
于 2013-06-24T12:23:38.450 回答