2014-05-21 58 views
-1

我的页面上的各种元素都有内容可编辑标签。将一个on事件添加到e.currentTarget?

当他们被点击我这样做:

$('[contenteditable]').on('click', this.edit); 

p.edit = function(e) { 

    console.log(e.currentTarget); 
    e.currentTarget.on('keydown', function() { 
     alert("keydown..."); 
    }); 


}; 

我得到的当前目标确定,但是当我尝试的keydown添加到它,我得到的错误:

Uncaught TypeError: undefined is not a function 
+0

嗯,你要确保多个事件不附? – epascarello

回答

2

这是一个原生的DOM元素,你就必须把它包在jQuery的

$(e.currentTarget).on('keydown', function() { 
    alert("keydown..."); 
}); 

e.currentTarget应该等于this里面的事件处理程序,哪个更常用?

这是一个有点分不清是如何工作的,但我想我会做类似

$('[contenteditable]').on({ 
    click : function() { 
     $(this).data('clicked', true); 
    }, 
    keydown: function() { 
     if ($(this).data('clicked')) 
      alert("keydown..."); 
    } 
}); 

Demo

+0

谢谢,但警报不会为我解雇。 – panthro

+1

'p'等于'this',它看起来很奇怪吗?打开控制台并检查错误 – user3649503

+0

控制台上没有错误。 – panthro

0

你需要用的e.currentTarget(这是一个天然的DOM元素) jQuery中,因为 “对” 事件是一个jQuery事件:

$(e.currentTarget).on('keydown', function() { 
    alert("keydown..."); 
}); 

编辑:

$('[contenteditable]').on('click', p.edit); 

p.edit = function(e) { 

    $(e.currentTarget).on('keydown', function() { 
     alert("keydown..."); 
    }); 
}; 

你定义p.edit$('[contenteditable]').on('click', p.edit);导致一个错误,因为p.edit声明on当它不存在。

如果你不知道,你要定义p.edit作为函数表达式,这意味着你必须定义之前调用它。

1

第一个问题是你要使用DOM元素jQuery的方法。第二个问题是我不认为你想绑定什么点击,但内容可编辑元素本身。

它也似乎不可思议被添加上点击而不是全局侦听器的事件。但是,这是基本的想法

$(this) //current content editable element 
    .off("keydown.cust") //remove any events that may have been added before 
    .on('keydown.cust', function(e) { //add new event listener [namespaced] 
     console.log("keydown"); //log it was pressed 
}); 
1

编辑:我在代码中的失败。现在它工作正常。

让您的代码,我提高到这样一条:

$(function(){ 
    $('[contenteditable]').on('click', function(){ 
     p.edit($(this)); 
    }); 
}); 

var p = { 
    edit: function($e) { 
     console.log($e); 
     $e.on('keydown', function() { 
      console.log($(this)); 
      alert("keydown..."); 
     }); 
    } 
} 

可以check it at jsFiddle

+0

'$(this)'不是您认为的那样...您只是将一个keydown事件添加到文档中。 – epascarello

+0

大声笑你是对的,thx通知我@epascarello,后更新做得很好:) – kosmos