Javascript 定义函数而不立即调用它而不发生事件(单击/悬停…)
我有一个非常庞大的jquery函数,为了让它更易于阅读,我想知道如何将它放在其他地方,并仅在另一个函数中调用它(更具体地说,在ajax调用中,我现在已经定义了它) 问题是,当我定义函数时,它会自动运行,我不希望这样。我希望它在ajax调用中运行,但不在那里定义它 以下是我的示例代码:Javascript 定义函数而不立即调用它而不发生事件(单击/悬停…),javascript,jquery,ajax,Javascript,Jquery,Ajax,我有一个非常庞大的jquery函数,为了让它更易于阅读,我想知道如何将它放在其他地方,并仅在另一个函数中调用它(更具体地说,在ajax调用中,我现在已经定义了它) 问题是,当我定义函数时,它会自动运行,我不希望这样。我希望它在ajax调用中运行,但不在那里定义它 以下是我的示例代码: $.ajax({ type: 'post', url: 'api/'+$("#id").val()+"/"+$("#from").val()+"/"+$("#to").val(), data
$.ajax({
type: 'post',
url: 'api/'+$("#id").val()+"/"+$("#from").val()+"/"+$("#to").val(),
data: {},
success: function generateChart(data) {
var results = JSON.parse(data);
if (results.error == true) {
var errCode = results.code;
alert(errCode);
}
else {
var chartjsTemp = [];
var chartjsDate = [];
for (var i = 0; i < results.length; i++) {
chartjsTemp.push(results[i].probeTemp);
chartjsDate.push(results[i].dateProbe);
}
var ctx = document.getElementById('myChart').getContext('2d');
var button = $("#submitButton");
submitButton.addEventListener("click", function(){
myChart.destroy();
});
var myChart = new Chart(ctx, {
type: 'line',
data: {
labels: chartjsDate,
datasets: [{
label: 'temp',
data: chartjsTemp,
backgroundColor: "rgba(240,240,240,0.5)"
}]
}
});
}
}
});
$.ajax({
键入:“post”,
url:'api/'+$(“#id”).val()+“/”+$(“#from”).val()+“/”+$(“#to”).val(),
数据:{},
成功:函数generateChart(数据){
var results=JSON.parse(数据);
如果(results.error==true){
var errCode=results.code;
警报(错误代码);
}
否则{
var chartjsTemp=[];
var chartjsDate=[];
对于(var i=0;i
我想把我的“generateChart”函数放到其他地方。如果我把它放在“其他地方”,只执行“
success:generateChart()”
它将不工作,而是在页面加载时运行。您应该能够将所有函数保存在变量中,而不必实际调用它们
下面是一个例子:
var myFunc=函数(param1){
console.log(param1);
}
$(函数(){
myFunc(“测试”);
myFunc('test2');
});代码>
您应该调用一个外部函数,如下所示:
function extFunc(data){
...
}
$.ajax({
type: 'post',
url: 'xxx',
data: {},
success: function generateChart(data) {
extFunc(data);
}
});
只需将定义移到ajax调用之外:
function generateChart(data) {
var results = JSON.parse(data);
if (results.error == true) {
var errCode = results.code;
alert(errCode);
} else {
var chartjsTemp = [];
var chartjsDate = [];
for (var i = 0; i < results.length; i++) {
chartjsTemp.push(results[i].probeTemp);
chartjsDate.push(results[i].dateProbe);
}
var ctx = document.getElementById('myChart').getContext('2d');
var button = $("#submitButton");
submitButton.addEventListener("click", function(){
myChart.destroy();
});
var myChart = new Chart(ctx, {
type: 'line',
data: {
labels: chartjsDate,
datasets: [{
label: 'temp',
data: chartjsTemp,
backgroundColor: "rgba(240,240,240,0.5)"
}]
}
});
}
}
$.ajax({
type: 'post',
url: 'api/'+$("#id").val()+"/"+$("#from").val()+"/"+$("#to").val(),
data: {},
success: function(data) {
generateChart(data);
}
});
函数生成部分(数据){
var results=JSON.parse(数据);
如果(results.error==true){
var errCode=results.code;
警报(错误代码);
}否则{
var chartjsTemp=[];
var chartjsDate=[];
对于(var i=0;i
Show the code mate,我可以/可能已经给出了解决方案,而不是发表评论。问题是,当我定义函数时,它会自动运行-这不应该发生。请向我们显示代码。在$(document).ready()函数之外定义它。如果没有一些代码片段,我们将无法帮助您。请显示一些您编写的代码。不明白,多么愚蠢,这是function(data){generateChart(data);}
,我试图调用generateChart()
是的,回调函数的函数名没有必要工作,你的回答让我看到我犯了一个非常愚蠢的语法错误;我忘了数据
在generateChart内部…很高兴它对您有所帮助。:)是的,现在可以用了。我忘记了函数中的数据
,控制台中出现了严重的不友好错误。啊。