TypeError:$(...)。SetHeight不是函数

时间:2013-12-15 13:45:35

标签: javascript jquery html css fluid-layout

我正在为我的网站编写一个流畅的布局,我使用jQuery来设置DIV的高度和宽度。 在SetHeight函数中,我将想要的高度作为函数的第一个参数,而不是我减去边距并应用新的高度。

function SetHeight(height){
    var outer = $(this).outerHeight(true);
    var current = $(this).height();
    var margin = o-c;
    height = height-margin;
    $(this).css("height",height);   
};

以下是触发错误消息的代码:

var h = $(window).height();
$("#Slider").SetHeight(h-260).removeClass("mobile");

我正在使用 $(document).ready $(window).resize 和一个计时器来检查我是否需要调整任何DIV的大小。

我错过了什么?

3 个答案:

答案 0 :(得分:4)

你已经定义了一个函数,但你正在使用它像jQuery对象上的方法。

如果你这样做:

function f(param1, param2){
    // code
}

你需要像这样使用它:

f(div, 4);

如果你想像你一样使用它,你需要做这样的事情:

$.fn.SetHeight = function(param1, param2){
    // code
}

所以你可能想要这个:

function SetHeight(height){
    var outer = this.outerHeight(true);
    var current = this.height();
    var margin = outer-current;
    height = height-margin;
    this.css("height",height);
    return this;  // to allow chaining
};
$.fn.SetHeight = SetHeight;  // add as a jQuery method

然后你可以使用你的代码:

$("#Slider").SetHeight(h-260).removeClass("mobile");

您可以像在示例中那样使用它。

请注意this已经是jQuery对象,因此您不需要像$(this)那样包装它。你最后应该返回this来支持链接 - 就像在最后调用.removeClass("mobile")一样。


另请参阅:http://api.jquery.com/jQuery.fn.extend/

答案 1 :(得分:1)

您看到该错误,因为没有Jquery object具有SetHeight()之类的功能您应该更改下面的函数定义和函数调用以满足您的需求。

尝试,

function SetHeight(xElement,height){
    var outer = xElement.outerHeight(true);
    var current = xElement.height();
    var margin = o-c;
    height = height-margin;
    xElement.css("height",height);   

   return xElement;
};

函数调用,

var h = $(window).height();
SetHeight($("#Slider"),h-260).removeClass("mobile");

答案 2 :(得分:1)

您的SetHeight函数不是jQuery对象原型的一部分。

将其设为一个,或者将jQuery或DOM对象作为第一个参数。