我有这个片段:
var test_img = $("<img />");
test_img.attr("src", img_url);
test_img.unbind("load");
console.log(test_img);
test_img.bind("load", function ()
{
console.log(this);
});
第一个console.log
输出:
[img]
0: img // expandable
length: 1
__proto__: Object[0] // expandable
第二个console.log
输出:
<img src="/images/Tree.jpg">
为什么两个输出不同?
另外,我需要定义在其他地方传递给test_img.bind
的函数。即,
function predefined_function()
{
console.log(new_this);
}
var test_img = $("<img />");
test_img.attr("src", img_url);
test_img.unbind("load");
console.log(test_img);
test_img.bind("load", predefined_function);
如何设置new_this
与原始代码段中的this
相同?
答案 0 :(得分:2)
作为第一个问题的答案,区别在于第一个输出的构造函数是jQuery.fn.init
,但第二个输出的构造函数是HTMLImageElement
。您可以使用test_img[0]
从第一个输出访问图像
如果您想使用某些预定义功能,只需将new_this
替换为this
。
答案 1 :(得分:0)
见这个例子:
https://jsfiddle.net/y89zk2k8/1/
var textDiv = $("<div />").append("click me :)"),
func = function() {
var $me = $(this);
console.log($me);
};
textDiv.off("click");
console.log(textDiv);
textDiv.on("click", func);
$("body").append(textDiv);
使new_this与此相同:您需要在事件响应函数中将其更改为Jquery Oject。
定义在其他地方传递给事件的函数:将函数作为参数传递给事件响应函数。
使用.on替换.bind,因为.bind可能会在以后的版本中被删除。没有理由继续使用.bind和所有理由而不是.on。