gpt4 book ai didi

Javascript 的奇怪之处 - 能够从脚本的一部分调用函数,但不能从另一部分调用函数

转载 作者:行者123 更新时间:2023-11-28 21:15:34 26 4
gpt4 key购买 nike

我有一个 JavaScript 文件,其中包含我引用的函数。当我从代码的一部分调用该函数时,它可以工作,而从另一部分则不能。将函数代码放在调用的上方或下方似乎没有任何区别。

当我调用 voteUp 函数时发生错误。

下面是整个 JS 文件。知道为什么对该函数的两次不同调用会产生如此不同的结果吗?上面代码的调用给出错误:未定义的函数。

$(function()
{
$("#login_div input[type=submit]").click(function()
{
var email = $("#email").val();
var password = $("#user_pass").val();

//alert("Email: " + email);
//alert("password: " + password);

var dataString = 'email='+ email + '&password=' + password;

if( !email )
{
alert ("1");
$('.login_success_email_empty').fadeOut(200).hide();
$('.login_error_email_empty').fadeOut(200).show();
}
else
if( !password || password.length < 5)
{alert ("2");
$('.password_success').fadeOut(200).hide();
$('.password_error').fadeOut(200).show();
}
else
{
$.ajax({
type: "POST",
url: "../auth/login_ajax.php",
dataType: "json",
data: dataString,
success: function(json)
{
$('.password_error').fadeOut(200).hide();
$('.no_such_user').fadeOut(200).hide();
$('.login_success_email_empty').fadeOut(200).hide();
$('.login_success').fadeIn(200).show();

// Closing the dialog bosx
$('#loginpopup').dialog('close');

// Swapping out the header div
$('#header_logged_out').hide();
$('#header_logged_in').show();

queue.login = true;

if (queue.voteUp)
{
alert("in vote up queue: " + queue.voteUp + " and login: " + queue.login );
voteUp(queue.voteUp);
}

// Now also need to retrieve the problem_id
//problem_id = $("#problem_id").val();
//$problemId = $('#theProblemId', '#loginpopup').val();


// var $problemId = $('#theProblemId', '#loginpopup');
// alert ("After login, problem_id: " + problem_id + " and problemId was: " + $problemId);
},
error : function(json)
{
queue.login = false;
alert ("error");

// Output the result.
errorMessage = json.responseText;

alert ("ErrorMessage: " + errorMessage );

if ( errorMessage == 'no_such_user' )
{
$('.no_such_user').fadeOut(200).hide();
$('.no_such_user').fadeOut(200).show();
}
}
});
}

return false;
});
});



$(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=+';

alert ("login status: " + queue.login );

if ( queue.login == false )
{
// Call the ajax to try to log in...or the dialog box to log in. requireLogin()

$dialog.dialog('open');

alert ("after dialog was open - in false case of being logged in.");

// prevent the default action, e.g., following a link
return false;
}
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" )
{
queue.login = false;

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

// prevent the default action, e.g., following a link
return false;
}
else
{
alert ("not");
}
} // End of error case
}); // Closing AJAX call.
} // Closing the else 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());
// }
// }); // Closing AJAX call.
//});

}); // End of document.ready() check

最佳答案

该函数在第二个“就绪”处理程序中被声明为局部变量。该上下文之外的任何内容都无法调用它。

也许您可以将其设为全局函数,但这取决于“队列”是否真的应该是全局函数。如果是,它确实应该显式声明为全局(即,在初始化代码之外使用 var 声明),因为您现在所得到的无论如何在“严格”模式下都是无效的。

关于Javascript 的奇怪之处 - 能够从脚本的一部分调用函数,但不能从另一部分调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7720146/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com