如何将jQuery片段放入全局文件中
How to place a jQuery snippet into a global file
我在这里有一个JavaScript文件http://www.problemio.com/js/problemio.js,我试图将一些jQuery代码放入其中,看起来像这样:
$(document).ready(function()
{
queue = new Object;
queue.login = false;
var $dialog = $('#loginpopup')
.dialog({
autoOpen: false,
title: 'Login Dialog'
});
var $problemId = $('#theProblemId', '#loginpopup');
$("#newprofile").click(function ()
{
$("#login_div").hide();
$("#newprofileform").show();
});
// Called right away after someone clicks on the vote up link
$('.vote_up').click(function()
{
var problem_id = $(this).attr("data-problem_id");
queue.voteUp = $(this).attr('problem_id');
voteUp(problem_id);
//Return false to prevent page navigation
return false;
});
var voteUp = function(problem_id)
{
alert ("In vote up function, problem_id: " + problem_id );
queue.voteUp = problem_id;
var dataString = 'problem_id=' + problem_id + '&vote=+';
if ( queue.login = false)
{
// Call the ajax to try to log in...or the dialog box to log in. requireLogin()
}
else
{
// The person is actually logged in so lets have him vote
$.ajax({
type: "POST",
url: "/problems/vote.php",
dataType: "json",
data: dataString,
success: function(data)
{
alert ("vote success, data: " + data);
// Try to update the vote count on the page
//$('p').each(function()
//{
//on each paragraph in the page:
// $(this).find('span').each()
// {
//find each span within the paragraph being iterated over
// }
//}
},
error : function(data)
{
alert ("vote error");
errorMessage = data.responseText;
if ( errorMessage == "not_logged_in" )
{
//set the current problem id to the one within the dialog
$problemId.val(problem_id);
// Try to create the popup that asks user to log in.
$dialog.dialog('open');
alert ("after dialog was open");
// prevent the default action, e.g., following a link
return false;
}
else
{
alert ("not");
}
} // End of error case
}
}); // Closing AJAX call.
};
$('.vote_down').click(function()
{
alert("down");
problem_id = $(this).attr("data-problem_id");
var dataString = 'problem_id='+ problem_id + '&vote=-';
//Return false to prevent page navigation
return false;
});
$('#loginButton', '#loginpopup').click(function()
{
alert("in login button fnction");
$.ajax({
url:'url to do the login',
success:function() {
//now call cote up
voteUp($problemId.val());
}
});
});
});
</script>
我这么做有两个原因:
1)我猜这只是一个很好的做法(希望它会更容易跟踪我的全局变量等。2)更重要的是,我试图从problemio.js文件的原始代码调用voteUp(someId)函数,我得到一个错误,它是一个未定义的函数,所以我想我有更好的运气调用该函数,如果它是在全局范围内。我的方法对吗?
所以我可以复制/粘贴我把这个问题的代码到problemio.js文件,或者我必须删除它的某些部分,如开始/结束标签?document.ready()函数呢?我应该在全局文件中使用其中一个吗?或者我应该有多个这样不会有什么坏处?
谢谢! !
1)我猜这只是一个很好的实践(希望它会是更容易跟踪我的全局变量,等等
是和否,你现在有你的"全局"变量在一个地方,但机会,你要碰撞的"全局"变量(即那些由浏览器定义)已经增加了100%:)
例如,你决定有一个名为location
的变量,一旦你给该变量一个值,浏览器决定飞到另一个URL,因为location
是重定向的保留字。
下面是一个使用命名空间调用2)更重要的是,我正在尝试调用voteUp(someId)函数从problemio.js文件的原始代码,我得到一个错误,它是一个未定义的函数,所以我想我最好如果该函数在全局作用域中,那么调用它是幸运的。我说的对吗?在我的方法中?
voteUp
函数的例子:
(function($) {
var myApp = {};
$('.vote_up').click(function(e) {
e.preventDefault();
myApp.voteUp();
});
myApp.voteUp = function() {
console.log("vote!");
}
})(jQuery);
document.ready()函数呢?我应该只吃一个吗全局文件中的那些?或者我应该有多个这样的不会痛吗?
可以有任意多个文档。准备好您需要的监听器,您不重写文档。准备好侦听该事件的触发,然后定义将发生什么。你甚至可以把它们放在单独的javascript文件中。
确保您的页面在此文件包含在页面之前找到jquery文件。如果没有jquery,您将得到未定义的函数。否则,您可能会有其他东西与您的jquery冲突,我将查看jquery noConflict。
var j = jQuery.noConflict();
如下所示:
http://api.jquery.com/jQuery.noConflict/快乐haxin
_wryteowl
扩展KreeK已经提供的功能:不需要在document ready函数中定义"myApp"。如果没有测试,我不知道这样做是否是范围问题的潜在来源。然而,我可以说,下面的模式不会有范围问题。如果这不起作用,则未定义可能是脚本加载问题(例如,以正确的顺序加载),而不是作用域问题。
var myApp = myApp || {}; // just adds extra insurance, making sure "myApp" isn't taken
myApp.voteUp = function() {
console.log("vote!");
}
$(function() { // or whatever syntax you prefer for document ready
$('.vote_up').click(function(e) {
e.preventDefault();
myApp.voteUp();
});
});
- 如何从onclick函数设置全局变量并将其传递给另一个JS文件
- 如何使全局变量仅特定于该文件
- 在节点中创建文件全局变量
- 如何使用webpack将全局JS文件包含到我的React项目中
- 对CommonJS配置文件使用全局变量
- Firefox扩展开发:如何在内容脚本中创建一个全局函数,以便其他加载的脚本文件可以访问它
- 从html文件中的脚本标记调用非全局命名空间函数
- 在外部.js文件中使用全局php数组
- 如何在单独的文件中使用自定义Vtype,以便在EXT.JS中全局使用它们
- 什么's是处理多个js文件之间交互的简单方法,同时避免溢出全局变量
- 全局变量确实'在script标记中的外部.js文件之后,nt工作
- 在blackberry cascades 10中访问多个qml文件中的全局变量
- 全局安装的NodeJS npm模块不执行节点的主/bin JavaScript文件
- 在全局范围内执行文件,而不是返回导出的对象
- 如何让 Mocha 加载定义全局钩子或实用程序的帮助程序.js文件
- 使用 grunt 在 javascript 文件中“嵌入”一个全局变量
- 仅在某个 URL 处在全局文件中执行 Javascript
- 如何将jQuery片段放入全局文件中
- angular2定义全局文件路径/名称空间
- 在服务器、客户端和所有文件之间共享Meteor功能,而不声明它们为全局文件