onClick in _.template lodash

时间:2017-12-18 14:56:33

标签: javascript jquery lodash

我有一个_.template,其中一些html使用按钮呈现。现在我想唤起onClick上的一个函数

在我的_.template

    <span class="input-group-btn">\
        <button class="btn-primary" type="button" onClick="do_search()"><span class="searching"></span></button>\
    </span>\

do_search()已实现,但是当我运行代码时,我得到一个未定义或空引用的运行时异常do_search()。在文件脚本块[动态]中自动生成一种新方法。如何绑定此方法以使用现有方法?我甚至试过this.do_search()

1 个答案:

答案 0 :(得分:1)

onClick()属性只能访问全局(window)范围内的方法:

function do_search() {
  alert('yey');
}

var str = '<span class="input-group-btn">\
               <button class="btn-primary" type="button" onClick="do_search()">\
               <span class="searching">Search</span></button>\
           </span>';
           
var compiled = _.template(str)({});

target.innerHTML = compiled;
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>

<div id="target"></div>

通常使用addEventListener()

将事件处理程序附加到此类模板

(function() {

  var str = '<span class="input-group-btn">\
               <button class="btn-primary search" type="button">\
               <span class="searching">Search</span></button>\
           </span>';

  var compiled = _.template(str)({});

  demo.innerHTML = compiled;

  var searchBtn = document.querySelector('.search');

  function do_search() {
    alert('yey');
  }

  searchBtn.addEventListener('click', do_search);

})();
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>

<div id="demo"></div>