有了这样的jQuery snipplet,我真的需要提高质量:
$foo.focus(function() {
if (!user_input)
{
jQuery(this).val('');
user_input = true;
}
else
{
jQuery(this).live("mouseup", function () {
$(this).select();
});
}
})
如何将实时部分更改为委托?我对指向父元素的部分感到困惑。
答案 0 :(得分:2)
我知道这个帖子超级老了,但我遇到了一个特殊的问题,这个帖子出现在搜索结果中。如果我正确理解了这个问题,那么使用jQuery的on()方法的委托功能以及这个所指的内容会产生混淆。也许这会帮助找到这个帖子的其他人。
鉴于以下代码:
$('#parentElement').on('click', '.childElement', function(){
console.log(this);
});
通过委派事件,您可能会想到 this 将指向父元素(#parentElement),但事实并非如此。 此仍然引用被点击的元素(.childElement)(或任何事件侦听器)。
对于大多数元素,单击它们会触发单击事件,但该事件会“冒泡”到父元素。委托背后的想法是事件监听器是父元素,因为不能不是动态元素。如果随后动态添加子元素,则单击它们也会在其父元素上触发事件。
使用on()方法的附加“.selector”参数将限制执行回调(function(){}代码块)到“.selector”jQuery对象中的元素。
答案 1 :(得分:0)
要从.live()
转换为.delegate()
,您只需拥有一个外部容器。
jQuery("selector").live("mouseup", function () {})
相当于
jQuery(document).delegate("mouseup", "selector", function() {})
使用委托的好处是您可以定位何时捕获该事件。 .live()
一直向document
冒泡,但是对于委托,您可以在包含div
的某些内容中阻止它。
在您的方案中,只需将document
替换为包含$foo
的内容。
这回答了您的问题,但实际上,您应该在功能上包含您的功能,尝试使用该代码实现,以便我们更好地帮助您。
我唯一的猜测是,您希望在用户点击文本框时突出显示文字?
另外:如果你有jQuery 1.7,请改用.on()。它取代了.bind(),. live()和.delegate()