Pass javascript function as data-* attribute and execute Pass javascript function as data-* attribute and execute javascript javascript

Pass javascript function as data-* attribute and execute


One way is to use eval()

jQuery(".container").on("click", "button.marker", function (e) {    var callback = jQuery(e.currentTarget).data("callback");    var x = eval(callback)    if (typeof x == 'function') {        x()    }});

Demo: Fiddle

Note: Make sure it is safe in your environment, ie there is no possibility of script injection because of bad input from users


I think a better idea would be to dynamically bind the events and trigger them. If you wanted them to only be known by other code, you could use custom events.

<button type="submit" class="marker marker1"></button><button type="submit" class="marker marker2"></button><button type="submit" class="marker marker3"></button><button type="submit" class="marker marker4"></button><script>    var $markers = $('.marker');    $markers.filter('.marker1').bind('customCallback', function(){ alert("hi"); });    $markers.filter('.marker2').bind('customCallback', function(){ doWork(); });</script>

Then your other components could invoke them with $(selector).trigger('customCallback');


Simply with :

 $("body").on("click","button.marker", function(e) {     eval($(this).data("callback")); })