Cuando hago clic en mi función, quiero cambiar un padre que tenga este elemento de función. Pero $(esto) no funciona.
¿Qué está mal?
function accountConfirm(message, title, yes_label, no_label, callback) { console.log($(this)); $("#accountConfirmModal").attr('data-confirm-yes', false); if ($("#accountConfirm").length == 0) { ..... } $("#accountConfirmModal .content p").html(message || ""); };Ese es el elemento HTML
<button type="button" id="deleteScrollTop" class="btn btn-delete" onclick="accountConfirm(jsResources.addressDeleteQuestion,jsResources.addressDeleteTitle, jsResources.yes,jsResources.no ,function(res){ if(res){ window.location.href = '@(Url.RouteUrl("CustomerAddressDelete", new {addressId = address.Id}))' } })"> <img src="@Url.ThemeFolderUrl("_images/delete.png")" alt="delete address" /> </button>Posiblemente quisiste hacer esto
Siempre es una buena idea consolidar en jQuery si lo usa y no usa controladores de eventos en línea
Suponiendo que el ID del botón es único
function accountConfirm(message, title, yes_label, no_label, callback) { $("#accountConfirmModal").attr('data-confirm-yes', false); if ($("#accountConfirm").length == 0) { ..... } $("#accountConfirmModal .content p").html(message || ""); }; const route = function(res) { if (res) { window.location.href = '@(Url.RouteUrl("CustomerAddressDelete", new {addressId = address.Id}))' } } $("#deleteScrollTop").on("click", function() { console.log($(this)); accountConfirm(jsResources.addressDeleteQuestion, jsResources.addressDeleteTitle, jsResources.yes, jsResources.no, route) }) <button type="button" id="deleteScrollTop" class="btn btn-delete"> <img src="@Url.ThemeFolderUrl("_images/delete.png")" alt="delete address" /> </button>Cuando invoca una función en un atributo onclick , en realidad es invocada por el objeto de la ventana, por lo this se convertirá en el objeto de la ventana en sí, no en el botón.
Si desea que this se convierta en el botón en sí, deberá usar el método de apply de la función.
Por ejemplo:
function somefunc(arg1, arg2){ console.log("This is ", this); console.log("Arg1: ", arg1); console.log("Arg2: ", arg2); } En onclick
<button onclick="somefunc.apply(this, [1, 2])">Button</button>Si desea acceder a "esto" en un evento onClick, hágalo así:
<button onclick="accountConfirm(this)"> your button </button> <script> function accountConfirm(elmnt) { console.log("this: ", elmnt); }; </script>