在网页上我有很多表格,所有表格都是class ='gsresponsive'。
我有一个jQuery插件,我可以使用类gsresponsive指向多个表,并将它们包装在2个div中,如下所示。如果屏幕宽度> 1,则第二div宽度将设置为100%。 767px否则宽度将设置为1024px(除非被覆盖)。当页面加载时,将应用适当的宽度,但我希望在窗口大小调整时再次调用插件。但这种情况并没有发生。
为什么我的插件不会在窗口上重新运行并且当屏幕出现在767px的任一侧时应用新的宽度?
<div style="overflow:auto;">
<div style="width:100%"> <!-- screen size dependant-->
<table> ....</table>
</div>
<div>
我的插件就像这样调用......
$(document).ready(function() {
$("table.gsresponsive").gstable();
});
我的插件看起来像这样......
(function($) {
$.fn.extend({
gstable: function(options) {
//Define default options.
var defaults = {
scrsplit : 767, //Modify table when screen gets to this size.
tblwidth : "1024px" //Default table width when on a small screen (screen width < scrsplit).
}
var o = $.extend(defaults, options);
var $obj = $(this);
return this.each(function() {
$obj.wrap("<div class=\"table-wrapper\" style=\"overflow:auto;\" />");
if ($(window).width() < o.scrsplit){
$obj.wrap("<div style=\"width:"+o.tblwidth+"\" />");
} else {
$obj.wrap("<div style=\"width:100%;\" />");
}
$(window).load(updateOvalTables);
$(window).bind("resize", updateOvalTables);
});
var switched = false;
var updateOvalTables = function() {
alert('updating');
if (($(window).width() < o.scrsplit) && !switched ){
switched = true;
splitOvalTable($obj);
//return true;
} else if (switched && ($(window).width() > o.scrsplit)) {
switched = false;
unsplitOvalTable($obj);
}
};
function splitOvalTable(elem) {
elem.parent().css("width", o.tblwidth);
}
function unsplitOvalTable(original) {
elem.parent().css("width", "100%");
}
}
});
})(jQuery);
答案 0 :(得分:0)
函数表达式,即变量updateOvalTables
在$.each
函数之后声明。它仍然被提升,但在.each
循环中updateOvalTables
未定义。您还在return
语句之后声明了变量,这有点晚了。
所以这个:
$(document).on('click', foo);
var foo = function() { alert(); }
将无法正常工作,因为foo
尚未定义,但是:
var foo = function() { alert(); }
$(document).on('click', foo);
有效,因为foo
已定义!
因此将函数表达式移到$.each
循环上方(或将其更改为函数声明):
(function($) {
$.fn.extend({
gstable: function(options) {
//Define default options.
var defaults = {
scrsplit : 767, //Modify table when screen gets to this size.
tblwidth : "1024px" //Default table width when on a small screen (screen width < scrsplit).
}
var o = $.extend(defaults, options),
$obj = $(this),
switched = false;
updateOvalTables = function() {
alert('updating');
if (($(window).width() < o.scrsplit) && !switched ){
switched = true;
splitOvalTable($obj);
//return true;
} else if (switched && ($(window).width() > o.scrsplit)) {
switched = false;
unsplitOvalTable($obj);
}
};
return this.each(function() {
$obj.wrap("<div class=\"table-wrapper\" style=\"overflow:auto;\" />");
if ($(window).width() < o.scrsplit){
$obj.wrap("<div style=\"width:"+o.tblwidth+"\" />");
} else {
$obj.wrap("<div style=\"width:100%;\" />");
}
$(window).load(updateOvalTables);
$(window).bind("resize", updateOvalTables);
});
function splitOvalTable(elem) {
elem.parent().css("width", o.tblwidth);
}
function unsplitOvalTable(original) {
elem.parent().css("width", "100%");
}
}
});
})(jQuery);
答案 1 :(得分:0)
您是否尝试使用单独的调整大小功能?
$(document).ready(function(){
console.log("window inizialized");
$("table.gsresponsive").gstable();
$(window).resize(function(){
console.log("resize event fired");
$("table.gsresponsive").gstable().updateOvalTables();
});
});