为什么Body Onload不能与函数一起使用

时间:2014-03-06 14:34:13

标签: javascript jquery html

我不知道为什么会发生这种情况,这可能只是一个基本错误,但我的body能够调用函数,因为:

Uncaught ReferenceError: changeImg is not defined

这是我的相关PHP / HTML:

<?php print("<body onLoad='javascript:changeImg(year_" . $p_date[0] . ")'>"); ?>

我的JavaScript功能:

var currentImg = 0;
var totalImg = 0;
var stored_year = 0;

$("#next-button").click(function() {
    if (currentImg == totalImg) {
        currentImg = 0;
    }
    else {
        currentImg++;
    }
    changeImg();
});

$("#previous-button").click(function() {
    if (currentImg == 0) {
        currentImg = totalImg;
    }
    else {
        currentImg--;
    }
    changeImg();
});

function changeImg(galleryYear) {

    if (galleryYear = stored_year) {


        $("#gallery-image").html("<img src='" + galleryYear.x_src[currentImg] + "'>");
        $("#gallery-title").html(galleryYear.x_title[currentImg]);
        $("#gallery-medium").html(galleryYear.x_medium[currentImg]);
        $("#gallery-size").html(galleryYear.x_size[currentImg]);
        $("#gallery-date").html(galleryYear.x_date[currentImg]);

        var userCurrent = currentImg + 1;
        var userTotal = galleryYear.x_id.length;

        $("#current-post").html(userCurrent);
        $("#post-total").html(userTotal);

        var galWidth = $("#gallery-image" > "img").width();
        $("#gallery").width(galWidth);

    }
    else {

        currentImg = 0;
        $("#gallery-image").html("<img src='" + galleryYear.x_src[currentImg] + "'>");
        $("#gallery-title").html(galleryYear.x_title[currentImg]);
        $("#gallery-medium").html(galleryYear.x_medium[currentImg]);
        $("#gallery-size").html(galleryYear.x_size[currentImg]);
        $("#gallery-date").html(galleryYear.x_date[currentImg]);

        var userCurrent = currentImg + 1;
        var userTotal = galleryYear.x_id.length;

        $("#current-post").html(userCurrent);
        $("#post-total").html(userTotal);

        var galWidth = $("#gallery-image" > "img").width();
        $("#gallery").width(galWidth);

        $("#gallery-type").html('<img id="gallery-switch" alt="" src="images/gallery-icon.png" onClick="gallerySwitch()">');

        stored_year = galleryYear;
    }

}

它工作得早,但为什么不呢?

3 个答案:

答案 0 :(得分:0)

当它表示函数未定义时,这通常意味着,必须在调用函数的代码之前调用声明函数的javascript。

在你的例子中(如果粘贴整个代码会更好)我想你应该把JS代码放在<head>标签中,这样可以解决你的问题。

另一个选择是使用document.ready事件或document.load事件,但不是直接绑定在标记中,而是绑定在主体的末尾。

答案 1 :(得分:0)

我认为在您的代码中,year_" . $p_date[0] . "是什么。

这可能是一个值。但是你已将此作为变量传递。

或者可能以某种方式 changeImg 未加载或在 changeImg 声明之前出现错误。

有时如果JavaScript中存在某些错误或异常,则显示未定义的函数。

答案 2 :(得分:0)

问题似乎与功能的主体有关。检查小提琴。 http://jsfiddle.net/rajanrawat/3pCvX/

var currentImg = 0;
var totalImg = 0;
var stored_year = 0;

$("#next-button").click(function() {
if (currentImg == totalImg) {
    currentImg = 0;
}
else {
    currentImg++;
}
changeImg();
});

$("#previous-button").click(function() {
if (currentImg == 0) {
    currentImg = totalImg;
}
else {
    currentImg--;
}
changeImg();
});

function changeImg(galleryYear) {

alert('in here');

}

它获得了这个功能。也许你没有在ondom ready或者

中绑定它
$(document).ready()