soy bastante nuevo en jQuery, pero tengo algunos enlaces en mi página que debería alternar secciones de la forma visible al hacer clic, o si javascript está deshabilitado lo hace una devolución de datos completa para cambiar aquellas secciones¿Por qué mi publicación previa ocurre antes de mi evento jQuery click?
funciona bien en mi entorno de prueba, con el PostBack que ocurre después de la secuencia de comandos de jQuery, pero una vez que lo despliego, la publicación previa ocurre antes del evento de clic de jQuery. Se implementó en un servidor Windows 2003 que ejecuta IIS 6.0, mientras que mi entorno de prueba es Windows XP/IIS 5.1/VS2010
Aquí está el código que estoy usando. La secuencia de comandos se ejecuta en producción si lo puse en .ready()
en lugar de .click()
pero en .click()
ni siquiera recibo la alerta, por lo que supongo que el problema es con el posteo que ocurre antes de que el script jQuery tenga la oportunidad de ejecutarse.
jQuery:
$(document).ready(function() {
// Toggle Details
$('.toggleDetailsButton').click(function() {
alert('test');
$(this).parentsUntil(".parentRow").parent().next().toggleClass("hidden");
return false;
});
});
de código subyacente:
Protected Sub rpData_ItemCommand(ByVal sender As Object, ByVal e As RepeaterCommandEventArgs) Handles rpData.ItemCommand
// Manually toggle rows here
End Sub
ASP:
<asp:Repeater ID="rpData" runat="server">
<ItemTemplate>
<tr class="parentRow">
...
<asp:Button runat="server" ID="cmdViewDetails"
CommandName="ToggleDetails" Text="details"
CssClass="buttonAsLink toggleDetailsButton" />
...
</tr>
<tr id="rpData_DetailsRow" class="detailsRow hidden" runat="server">
</tr>
</ItemTemplate>
</asp:Repeater>
Editar
por una sugerencia en los comentarios a continuación, ejecutar la función jQuery en onClientClick
hace que la página actúe como debería, sin embargo, aún quiero saber por qué se produce el PostBack después del evento jQuery en mi entorno de prueba, pero antes del evento jQuery en producción.
He notado otras diferencias entre los dos también. Por ejemplo, también tengo un botón que activa/desactiva un div de búsqueda que funciona bien en las pruebas pero no en la producción. Utiliza $('.toggleSearchButton').next()
para obtener el div debajo del botón de búsqueda y alterna su nombre de clase. En producción, este objeto devuelve [object Object]
, sin embargo, llamando al .attr('class')
devuelve undefined
(también .attr('id')
, .attr('tag')
y .nodeName
). En mi entorno de prueba, devuelve los valores correctos para mi div de búsqueda.
He probado este comportamiento en IE, FF y Chrome. En mi máquina de prueba, funciona bien en todos 3. En mi máquina de producción, solo IE funciona como debería.
Ver si http://api.jquery.com/event.stopPropagation/ en su función de clic no aclarar las cosas . – asawyer
@asawyer El 'alerta' no aparece, por lo tanto, supongo que el PostBack se produce antes del evento de clic. Esto significa que 'stopPropagation' tampoco se ejecutará (simplemente lo probó y no ayuda) – Rachel
¿Ha colocado ese jQuery al principio o al final de su página? –