2013-12-15 94 views
1

我正在为我的网站编写流体布局,我使用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"); 

我使用$(文件)。就绪$(窗口).resize有计时器,以检查是否我需要调整任何DIV。

我错过了什么?

+0

自动调用setHeight()不是一个jquery方法。要设置它为jquery的方法,请使用:'$ .fn.SetHeight = function(){/ *您的代码*/return this;})'然后您可以使用:'$(“#Slider”)。SetHeight(.. 。)'FYI,按照惯例,应该设置Height()而不是SetHeight() –

回答

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/

+0

谢谢你的建议!我是jQuery中的新手:) – amatyas001

+2

这应该被接受回答恕我直言 –

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"); 
+0

它的工作原理!非常感谢! – amatyas001

+0

@Stewie很高兴帮助。! –

1

SetHeight功能不是jQuery对象的原型的一部分。

让它成为一体,或者让它将jQuery或DOM对象作为第一个参数。

相关问题