e.preventDefault(); undefined不是一个函数

时间:2014-11-07 08:03:56

标签: javascript jquery

点击e.preventDefault();时,我收到以下错误,即---> e.undefined is not a function<button class='url_qry_add' onclick='url_qry_add(this);'>。函数本身是在</body>结束之前定义的,我只调用过一次jQuery。

功能结构如下:

var url_qry_add = function ( e ) {
    e.preventDefault();
    ...
};

过去是:

$( "ul.url_qry" ).on( "click", "li .url_qry_add", function ( e ) {
    e.preventDefault();
    ...
});

但之后动态添加的后续按钮未被拾取。

所以我一直试图弄清楚如何解决它并决定我应该尝试将问题函数转换为命名的“invokable”函数,并将onclick='..'手动调用到按钮中在动态创造之前和之后存在。

就像我说的那样,错误必须与我创建函数的方式或我调用它的方式有关。该错误与文件的顺序无关,我没有意外地将该函数嵌套在另一个函数或document.ready中。

我做错了什么?

1 个答案:

答案 0 :(得分:4)

<button class='url_qry_add' onclick='url_qry_add(event);'>

var url_qry_add = function (e) {
    console.log(typeof e.preventDefault); // function 
};

<强>更新

当我们向函数url_qry_add添加属性&#34;在&#34;内部时,我会尝试澄清它是如何工作的&#34;内部&#34;它看起来像这样:

document.querySelector('.url_qry_add').addEventListener('click', function (event) {
  (function (event) {
    url_qry_add(event, this, $(this));
  }).call(event.target, event);
});

var url_qry_add = function (event, element, $jElement) {
  console.log(event);
  console.log(element);
  console.log($jElement);
};

因此,我们有变量&#34; 事件&#34; (事件对象,我们有方法 preventDefault 等),&#34; this &#34; (当前要素)。我希望这个解释能帮助您了解我们在哪里获得变量&#34; event &#34;。