.click()
is just a shorthand of .on('click')
. So, even if you use .on() it won't fire.
For dynamically created elements, you have to handle event delegation with the following syntax:
(parentselector).on(event,selector,function(){});
So based on that,
$('.product-card').on('click',function() {}); // this is wrong
replace with
$(document).on('click','.product-card',function() {}); // this will work