JQuery可以't从单独的javascript文件中查找变量
JQuery can't find variable from separate javascript file
我使用的是cakephp框架,我创建了两个单独的javascript文件,并将它们放在我的webroot/js文件夹中。第一个javascript文件包含模式对话框变量,这些变量包含对话框的设置。第二个javascript文件包含其他点击事件处理程序,它们将数据发布到操作,然后打开对话框。
我遇到的问题是,第二个文件使用$variablename,我收到一个错误,说没有定义varaibleName。
下面有一些代码来告诉你我的意思。来自第一个文件:
var $editSel = $("#editSel_dialog").dialog(
{
autoOpen: false,
height: 530,
width: 800,
resizable: true,
modal: true,
buttons:
{
"Cancel": function()
{
$(this).dialog("close");
}
}
});
来自第二个文件:
$('.neweditSel_dialog').live('click', function()
{
$.ajaxSetup({ async: false });
var selected = [];
$("#[id*=LocalClocks]").each(function()
{
if(false != $(this).is(':checked'))
{
var string = $(this).attr('id').replace('LocalClocks', '');
string = string.substring(10);
selected.push(string);
}
});
if(0 === selected.length)
{
$selError.dialog('open');
$selError.text('No Local Clocks Were Selected')
}
else
{
$.post('/LocalClocks/editSelected', { "data[Session][selected]": selected }, function(data)
{
});
$editSel.load($(this).attr('href'), function ()
{
$editSel.dialog('open');
});
}
return false;
});
当我使用jquery-1.4.2.min.js时,这是有效的,但我现在使用的是jquery1.7。我还把第一个文件和所有变量放在了$(document).ready(function(){});
中。我试着把第二个文件放在document.ready()函数中,但没有什么区别。
任何帮助都会很棒。感谢
您正在处理范围中的一个问题。在javascript:中
function foo() {
var greet = "hi";
}
function bar() {
console.log(greet); // will throw error
}
但是:
var greet;
function foo() {
greet = "hi";
}
function bar() {
console.log(greet); // will log "hi"
}
您必须在需要访问变量的两个函数的公共父函数中定义变量。不幸的是,由于您没有使用任何建模约定或框架,这就是窗口对象(为什么全局变量不好?)。
因此,您必须在之前定义var $whateveryouneed
,在之外定义$(document).ready
s。
同时,保持declaration
和definition
分离。您的定义实例化了一个jQuery对象,因此必须将其封装在$(document).ready()
中(请改用$(function() {})
):
var $editSel;
$(function () {
$editSel = $("#editSel_dialog").dialog(
{
autoOpen: false,
height: 530,
width: 800,
resizable: true,
modal: true,
buttons:
{
"Cancel": function()
{
$(this).dialog("close");
}
}
});
});
我认为您无法保证处理程序的启动顺序,这意味着文档就绪可能会以与您预期的不同的顺序启动。您试图在第二个文件中访问的变量是全局变量吗?试着想想你的变量范围,就像我认为的那样,这就是问题所在。
您不能保证一个文件会在另一个文件之前加载。您不能保证一个文件中的document.ready会在另一个文件之前启动。
因此,我建议您将代码封装在函数中,并按照需要的顺序在单个document.ready处理程序中调用它们。
例如:
function initVariables(){
window.$editSel = ... // your code from the first file here
}
function initHandlers(){
// your code from the second file here
}
然后:
$(document).ready(function() {
initVariables();
initHandlers();
});
您会注意到,我使用了全局window
对象来公开您的变量。如果您为它们使用一个通用的名称空间,那会更好。
- 使用压缩的JavaScript文件(不是运行时压缩)
- 如何包含特定于每个视图angularjs的javascript文件
- 将数据从javascript文件导入VB.Net页面
- Chrome加载旧版本的Javascript文件
- 操作员”;新的“;根据我想在几个JavaScript文件中使用的类,在JavaScript中使用
- gulp-if-javascript文件,但不在gulp-useref的特定目录中
- 如何在visualstudio中调试web api时编辑javascript文件
- 关于引入外部javascript文件的问题&css通过https
- 有没有办法在tinymceiframe中加载一个外部javascript文件
- 什么'是在asp.net MVC中将本地化的resources.resx文件转换为javascript文件的有效
- 在一个javascript文件中为整个网站创建标签
- 如何在定义js文件后为外部javascript文件设置变量
- 显示IIS上javascript文件(SOAP请求)的XML响应
- ResolveUrl没有'我似乎不适合当链接到具有动态虚拟目录的外部javascript文件时
- 我应该将MVC视图特定的javascript文件放在哪个文件夹中
- Django'支持Javascript文件中的翻译
- MVC正在忽略我的Javascript文件
- 为什么不't我的ruby代码与javascript文件一起插入
- 在Javascript文件中获取PHP变量
- 如何在Windows中将Javascript文件编译成二进制文件