You were trying to assign an object rather its name so that was causing the error. Try it this way
for (var i = 0; i < x.length; i++) { var data = "<span onclick='getInfo(\"" + x[i].data.name + "\")'>main </span>"; data += "<span onclick='getInfo(\"" + x[i].data.name + "\")'>sub </span>" data += "<span onclick='getInfo(\"" + x[i].data.name + "\")'>lower</span><br>" $('#data').prepend(data); }
Better use Jquery onclick function something like
for (var i = 0; i < x.length; i++) { var data = "<span data-name='\"" + x[i].data.name + "\"' class='notify'>main</span>"; data += "<span data-name='\"" + x[i].data.name + "\"' class='notify'>sub </span>" data += "<span data-name='\"" + x[i].data.name + "\"' class='notify'>lower</span><br>" $('#data').prepend(data); } $(document).on('click', '.notify', function(e) { console.log($(this).attr('data-name')); });
Jquery Fiddle
Or as Suggest by @Nemanja Todorovic you can cast Json to string
for (var i = 0; i < x.length; i++) { var data = "<span data-info='\"" + JSON.stringify(x[i].data) + "\"' class='notify'>main</span>"; data += "<span data-info='\"" + JSON.stringify(x[i].data) + "\"' class='notify'>sub </span>" data += "<span data-info='\"" + JSON.stringify(x[i].data) + "\"' class='notify'>lower</span><br>" $('#data').prepend(data); } $(document).on('click', '.notify', function(e) { console.log($(this).attr('data-info')); });
Final Fiddle
onclick="getInfo([object Object])". You should preferably use javascript or jQuery click handlers.