鍍金池/ 問答/HTML/ 函數(shù)作為參數(shù)的話,怎么調(diào)用?

函數(shù)作為參數(shù)的話,怎么調(diào)用?

var vAlert = function (data) {
    //$(obj).onclick = data.fa;
    var html_str = "<button onclick="data.fa">button</button>";
    document.body.insertAdjacentHTML("beforebegin", html_str );
};

調(diào)用的時候:

vAlert({
    fa:function(){
        alert("fa");
    }
    ,fb:function(){
    }
})

這樣無法調(diào)用,不知道應該怎么寫

回答
編輯回答
深記你

解決

html字符串拼接的那句代碼改成

var html_str = "<button onclick=\"("+data.fa+")()\">button</button>";

原因

  1. 你拼接的時候,引號沒使用正確
  2. 即使引號拼接對了,onclik的值也有問題

原理

綁定事件處理函數(shù)有兩種情況

  • js中綁定,綁定函數(shù)就行了
  • html中綁定,必須是綁定函數(shù)的調(diào)用,即必須在函數(shù)后面加()

建議

  • 還是通過js綁定比較好,或者直接綁定一個具名函數(shù),這種綁定函數(shù)體的作法,引號太多了,麻煩得很
  • 了解一下犀牛書事件那一章
2017年4月16日 19:57
編輯回答
舊酒館

傳參沒問題,問題出在你給 jq 對象綁定了原生 js 的 onclick 事件,當然綁錯了,可以通過.get(index) 獲得原生的 js 對象,再綁定

var vAlert = function (data) {
    $(obj).get(0).onclick = data.fa;    
};

jq 的綁定好像是這樣的:

var vAlert = function (data) {
    $(obj).click(data.fa);    
};
2017年2月19日 22:16
編輯回答
蟲児飛
<div class="box">demo</div>
<script>
~function($) {
  var vAlert = function (data) {
    $(obj).onclick = data.fa;
  },
  obj = '.box';
  vAlert({
  fa : function() {
    alert("fa");
  },
  fb : function() {
  }
  });
}(function(s) {
  return document.querySelector(s);
});
</script>
2017年3月7日 02:06