Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
窗口调整时未调用jQuery插件_Jquery_Jquery Plugins_Window Resize - Fatal编程技术网

窗口调整时未调用jQuery插件

窗口调整时未调用jQuery插件,jquery,jquery-plugins,window-resize,Jquery,Jquery Plugins,Window Resize,在一个网页上,我有许多表,都带有class='gsresponsive' 我有一个jQuery插件,我可以指向多个具有gsresponsive类的表,并将它们封装在下面的2个div中。如果屏幕宽度>767px,则第二个div宽度将设置为100%,否则宽度将设置为1024px(除非被覆盖)。当页面加载时,将应用适当的宽度,但我希望在调整窗口大小时再次调用插件。但这并没有发生 为什么我的插件不在窗口上重新运行,当屏幕转到767px的任意一侧时,它会重新调整并应用新的宽度 <div style=

在一个网页上,我有许多表,都带有class='gsresponsive'

我有一个jQuery插件,我可以指向多个具有gsresponsive类的表,并将它们封装在下面的2个div中。如果屏幕宽度>767px,则第二个div宽度将设置为100%,否则宽度将设置为1024px(除非被覆盖)。当页面加载时,将应用适当的宽度,但我希望在调整窗口大小时再次调用插件。但这并没有发生

为什么我的插件不在窗口上重新运行,当屏幕转到767px的任意一侧时,它会重新调整并应用新的宽度

<div style="overflow:auto;">
    <div style="width:100%"> <!-- screen size dependant-->
        <table> ....</table>
    </div>
<div>
我的插件看起来像这样

(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);
(函数($){
$.fn.extend({
gstable:功能(选项){
//定义默认选项。
var默认值={
scrsplit:767,//当屏幕达到此大小时修改表。
tblwidth:“1024px”//在小屏幕上时的默认表格宽度(屏幕宽度o.scrsplit)){
切换=假;
不可列支敦士登($obj);
}
};
函数可拆分可变(elem){
elem.parent().css(“宽度”,o.tblwidth);
}
功能不可拆分(原始){
elem.parent().css(“宽度”、“100%”);
}
}
});
})(jQuery);

函数表达式,即变量
updateOvalTables
$之后声明。每个
函数。它仍然被提升,但在
中。每个
循环
updateOvalTables
都未定义。您还在
return
语句之后声明变量,这有点晚了

因此:

$(document).on('click', foo);

var foo = function() { alert(); }
不会工作,因为尚未定义
foo
,但是:

var foo = function() { alert(); }

$(document).on('click', foo);
之所以有效,是因为定义了
foo

因此,将函数表达式移到
$上方。每个
循环(或将其更改为函数声明):

(函数($){
$.fn.extend({
gstable:功能(选项){
//定义默认选项。
var默认值={
scrsplit:767,//当屏幕达到此大小时修改表。
tblwidth:“1024px”//在小屏幕上时的默认表格宽度(屏幕宽度o.scrsplit)){
切换=假;
不可列支敦士登($obj);
}    
};
返回此值。每个(函数(){
$obj.wrap(“”);
如果($(窗口).width()
您是否尝试使用单独的调整大小功能

 $(document).ready(function(){
    console.log("window inizialized");
    $("table.gsresponsive").gstable();
    $(window).resize(function(){
        console.log("resize event fired");
        $("table.gsresponsive").gstable().updateOvalTables();
    });
  });

从未尝试过,但您可以尝试在
$(窗口)内进行相同的初始化。resize(函数()
,例如
$(窗口)。resize(函数(){$(“table.gsresponsive”).gstable();};
,但我不知道这是否一定能解决您的问题。我就快到了;o)完成了任务:o)谢谢adeneo。@user1753622-不客气。如果答案对你有帮助,记得接受它。
(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);
 $(document).ready(function(){
    console.log("window inizialized");
    $("table.gsresponsive").gstable();
    $(window).resize(function(){
        console.log("resize event fired");
        $("table.gsresponsive").gstable().updateOvalTables();
    });
  });