From my reading of the docs they seem very similar except that the second one will fire the event even if the child element does not exist. Which is interesting.
And from that we could deduce that the first version wires up the click event listener on the target (.cancel-btn) element. It spends time finding that element when the listener is created, and there is no DOM traversal requirement when the click event fires the listener.
Meanwhile the second option wires a listener for the click event to the parent then searches out the child when the event fires.
Therefore in theory there will be a finite performance difference from the user perspective of the second option. Though the impact of that would depend on the element density and tree makeup of the page.
I guess in most cases the time impact is so small as to be unimportant. In which case the only true difference is the point about the second option firing irrespective of the presence of the child element.