【发布时间】:2019-04-18 06:41:46
【问题描述】:
在为onClick 属性定义value 时,我们知道如下语法:
<button type="submit" onclick="alert('hi');"></button>
<button type="submit" onclick="doWork"></button> <!-- This one doesn't work -->
<button type="submit" onclick="doWork()"></button>
<button type="submit" onclick="doWork('Mike', 2)"></button>
我感兴趣的是定义一个自定义的data-attribute 并执行如下值:
<button type="submit" data-callback="alert('hi');" class="marker"></button>
<button type="submit" data-callback="doWork" class="marker"></button>
<button type="submit" data-callback="doWork()" class="marker"></button>
<button type="submit" data-callback="doWork('Mike', 2)" class="marker"></button>
<script type="text/javascript">
jQuery("body").on("click","button.marker", function(e) {
var callback = jQuery(e.currentTarget).data("callback");
// Now I need to execute the callback no matter of the format
// 1. Execute as function's body
// 2. Or by function 'name'
// 3. Or by function 'name' with 0 parameters
// 4. Or by function 'name' with n parameters
})
function doWork(name, nr){
var personName = name || "Unnamed";
var personNr = nr || 0;
alert("Name is: " + personName + " Nr: " + personNr);
}
</script>
我已将示例粘贴到jsBin
如何使用自定义数据属性实现相同的行为?
【问题讨论】:
-
避免动态绑定有什么原因吗?会简化问题。
-
除非你有很好的理由/只是在试验,否则在数据属性中编写代码似乎是个坏主意!您可以在按钮上设置回调 $(".marker").myCallback = doWork;如果您不同意,请随意拓宽我的思路:)
-
@Taplar 是的。样本被简化。在生产代码中,回调意味着由其他组件调用,并且在以后调用。
-
@Mvision : AngularJS 并不认为在属性中编写代码是一个坏主意 :) 它是它的核心,恕我直言,甚至它的 方式 比 jQuery 更好用.
标签: javascript jquery custom-data-attribute