Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/378.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.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
Javascript 直到单击事件,Jquery变量才实例化_Javascript_Jquery - Fatal编程技术网

Javascript 直到单击事件,Jquery变量才实例化

Javascript 直到单击事件,Jquery变量才实例化,javascript,jquery,Javascript,Jquery,问题:直到用户双击红方块,元素才“最大化” 基本上,变量“clicked”是在onClick上实例化的,而不是在手之前实例化的。由此产生的行为是,用户必须单击一次,才能实例化“clicked”变量,然后函数才能按需要工作 这是你的电话号码 以及守则的重要部分: var container = $(this).parents('.container'); var paragraph = $(container).find('.text'); if (this.clicked == 0) {

问题:直到用户双击红方块,元素才“最大化”

基本上,变量“clicked”是在onClick上实例化的,而不是在手之前实例化的。由此产生的行为是,用户必须单击一次,才能实例化“clicked”变量,然后函数才能按需要工作

这是你的电话号码

以及守则的重要部分:

var container = $(this).parents('.container');
var paragraph = $(container).find('.text');
if (this.clicked == 0) {
    container.removeClass("large-4");
    container.addClass("large-8");
    paragraph.removeClass("hide");
    this.clicked = 1;
}
感谢您的帮助,谢谢

详细信息(不必阅读:D):

我之所以要进行这种反向选择(先选择子元素,然后选择父元素),是因为将有许多这样的“.container”元素,每个元素都需要通过单击最小值图标来具有相同的最小值/最大值功能

显然,该方法没有引用单个本地“clicked”类变量。这甚至没有意义,因为每个元素都需要自己的“clicked”变量

如果有更好的方法,我愿意接受任何事情,但即使如此,解决这个具体问题还是很好的,因为这将有助于我对Jquery的全面理解

对于熟悉类名的人,我在这个项目中使用了Foundation的框架


我有一种奇怪的感觉,认为这与闭包有关,但是的……我对JS或JQuery的了解还不足以真正理解这一点。

在JQuery事件处理程序中,这是指触发事件的对象。因此,在您的单击回调中,
不再引用您的艺术家实例。要解决这个问题,您可以创建一个变量
,该变量
,并将其设置为艺术家实例。由于,您可以引用该
,并且仍然可以访问该实例

Artist.clickHandler = function () {
    var that = this;
    //this.clicked is undefined until the event is actually fired
    that.clicked = 0;
    $('.minmax').click(function () {
        if (typeof that.clicked === 'undefined') {
            console.log("that.clicked is undefined");
        } else {
            console.log("that.clicked is defined");
        }
        //rest of handler here
    });
};

在jQuery事件处理程序中,此
引用触发事件的对象。因此,在您的单击回调中,
不再引用您的艺术家实例。要解决这个问题,您可以创建一个变量
,该变量
,并将其设置为艺术家实例。由于,您可以引用该
,并且仍然可以访问该实例

Artist.clickHandler = function () {
    var that = this;
    //this.clicked is undefined until the event is actually fired
    that.clicked = 0;
    $('.minmax').click(function () {
        if (typeof that.clicked === 'undefined') {
            console.log("that.clicked is undefined");
        } else {
            console.log("that.clicked is defined");
        }
        //rest of handler here
    });
};

问题已经回答,但我想补充一点,您可以在这里将
addClass()
removeClass()
更改为
toggleClass()
,您的代码将更易于维护。

问题已经回答,但我想补充一点,您可以在这里更改
addClass()
removeClass())
切换到
toggleClass()
,您的代码将更易于维护。

它实际上是
$('.minmax')。单击(function(){…
是的,哇哦,等一下,小提琴出了错误,修复了:D,很抱歉,哇,速度太快了!它实际上是
$('.minmax')。单击(function()){…
是的,等等,小提琴出了个错误,修正了:D,很抱歉,哇,这太快了!好吧,在原始代码中,我的“this”指的是一个Jquery对象?特别是与类“.minmax”匹配的Jquery对象?很抱歉,有点困惑。但是,是的,它工作得很好,这样一个小的修正:D谢谢!我没有我不知道这是怎么回事,在Opera中它对我根本不起作用。我在点击红场时一无所获。只是想让你知道。@SolomonClosson我一定会调查的,你尝试过另一个浏览器了吗?当你点击红场时,应该会发生什么?点击处理程序有一个与您的
Artist.clickHandler
函数不同的上下文。阅读有关javascript作用域的这篇文章可能会有所帮助:@user1490379-奇怪,因为我在
$(窗口)中得到了一个未定义的变量
$
.load
我想是从JSFIDLE开始的,但这以前从未发生过,所以这很奇怪。这可能就是为什么它在Opera中对我不起作用的原因。好吧,那么在原始代码中,我的“this”指的是一个Jquery对象?特别是与类“.minmax”匹配的Jquery对象?很抱歉,有点困惑。但是,它工作得很好这是一个小补丁:D谢谢!我不知道这应该做什么,在歌剧中它对我根本不起作用。我在点击红场时一无所获。只是想让你知道。@SolomonClosson我一定会调查的,你尝试过另一个浏览器吗?当你点击红场时,应该会发生什么事情?红场应该会变为@user1490379单击处理程序的上下文与您的
Artist.clickHandler
函数不同。阅读有关javascript作用域的这篇文章可能会有所帮助:@user1490379-奇怪,因为我在
$(窗口)中得到了一个未定义的变量
$
.load我想是从JSFIDLE加载的,但这以前从未发生过,这就是为什么它非常奇怪的原因。这可能就是为什么它在Opera中对我不起作用的原因。