javascript - this冲突问题
PHP中文网
PHP中文网 2017-04-11 11:46:18
[JavaScript讨论组]
Jigsaw.prototype.down = function(ev) {
    ev.preventDefault();
    var oEvent = this.isTouch(ev);
    this.flag = true
    
    this.op = $(this);//问题所在
    
    this.op.css('zIndex', 1)
    var opOffsetleft = this.op.offset().left;
    var opOffsettop = this.op.offset().top;
    this.boxX = oEvent.clientX - opOffsetleft; // 鼠标到被选p的横距离
    this.boxY = oEvent.clientY - opOffsettop; // 鼠标到被选p的纵距离
    this.oriboxLeft = this.op.position().left
    this.oriboxTop = this.op.position().top
};


在Jigsaw构造函数的原型上,建立一个鼠标按下事件程序,$(this)中的this应该指向的是被操作的p元素,然而this冲突了,请问如何修改这种情况?

我尝试用ev.target,但是显示的是img元素,本意是想操作p.box的,html代码如下:

另外我用jquery,所以希望最后取到p.box的jq对象

PHP中文网
PHP中文网

认证高级PHP讲师

全部回复(4)
伊谢尔伦

this冲突的原因就是点击事件的监听函数this.down执行的时候,函数中的this被改写为DOM对象了,这样本来属于原型对象的this就失效了,解决的方法是在执行this.down的时候绑定原型的作用域,也就是使用this.down.bind(this),这样监听函数里面的this就是原型本身了,但是我们可能还要使用DOM本身的对象,那就可以使用event.target,这个就是被点击对象本身了,如果使用jquery直接$(event.target)就可以了

PHPz

这里的this指向的是Jigsaw实例,不是被操作的元素

阿神

可以用ev.target吧。

黄舟
event.target.parent()
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号