我有一些简单的代码用于我的第一个jquery脚本之一,我试图调用它的函数,但它一直说该函数不存在!我检查了拼写,我确信之前有这个工作,但我不知道发生了什么变化。
这是我的代码:http://jsfiddle.net/spadez/6LLpC/
这就是我调用我的功能的方式:
jQuery(function($){
applyField();
});
有人能告诉我哪里出错吗?
答案 0 :(得分:5)
applyField
未定义,因为jsFiddle将您的代码包装在onload
事件处理程序中。因此该函数仅在此事件处理程序中可见。
在左侧菜单中选择"no wrap - in <head>"
:
或者,您也可以通过此事件处理程序调用您的函数,这将更加一致。
请注意,调用该函数是不够的。如果您希望事件绑定生效,请更改
$(this).on('change', '#apply',function() {
到
$(document.body).on('change', '#apply',function() {
答案 1 :(得分:1)
修复onload
问题后,您的第二个问题是this
不是您函数中<select>
元素的父级。要使用.on
的样式,您需要传入您要定位的元素的父级(可以是文档)。
更改自:
$(this).on('change', '#apply',function() {
要:
$(document).on('change', '#apply',function() {
另外,为了防止隐藏所有输入,我建议使用类而不是选择$('input')
。见小提琴。
答案 2 :(得分: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');
};
<强> 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');
});