Estoy intentando que los eventos de JQuery funcionen con vistas parciales en ASP.NET MVC. Sin embargo, después de cargar una vista parcial a través de Ajax, JQuery parece no poder disparar eventos para ninguno de los elementos en la vista parcial. Sospecho que este problema también ocurrirá si está utilizando otros marcos o bibliotecas de JavaScript para cargar código html parcial con Ajax.Los eventos de JQuery no funcionan con ASP.NET MVC Vistas parciales
Por ejemplo, consideremos el siguiente ejemplo:
controlador:
public class TestController : Controller
{
public ActionResult Index()
{
return View();
}
public ActionResult LoadPartialView()
{
return View("PartialView");
}
}
Index.aspx
<script type="text/javascript">
$(document).ready(function() {
$("#button").click(function() {
alert('button clicked');
});
});
</script>
<div>
<%using(Ajax.BeginForm("LoadPartialView", new AjaxOptions { UpdateTargetId="PartialView"})){ %>
Click <input type="submit" value="here" /> to load partial view.
<% } %>
</div>
<br /><br />
<% Html.RenderPartial("PartialView"); %>
PartialView.ascx
<div id="PartialView">
Click <input type="button" id="button" value="here"></input> to display a javascript message.
</div>
Una vez se carga la página para th La primera vez, puede hacer clic en "Haga clic aquí para ver un mensaje de Javascript" y obtendrá un mensaje de alerta de Javascript que dice "botón presionado". Sin embargo, una vez que haga clic en "Haga clic aquí para cargar la vista parcial", hacer clic en el botón que se supone que trae el mensaje de alerta de Javascript no tiene ningún efecto. Parece que el evento 'clic' ya no se está disparando.
¿Alguien sabe por qué ocurre este problema con JQuery y cómo solucionarlo? Este problema también ocurre con otros complementos de JQuery que usan eventos.
Impresionante. Esto de hecho funciona De acuerdo con la documentación oficial, live() se puede utilizar para adjuntar un controlador al evento para todos los elementos que coinciden con el selector actual, ahora o en el futuro. El único inconveniente es que las otras personas que escribieron los complementos aparentemente no usaron el método directo. Por lo tanto, para que funcione con los complementos existentes, es probable que alguien tenga que cavar en el código fuente y modificarlo. – dritan
Es cierto. Eso o después de que el contenido se haya agregado a la página, puede volver a llamar al complemento en lugar de solo cargar la página. Si la respuesta es suficiente, márquela como aceptada ... – mkedobbs
Esta respuesta no está actualizada, consulte la respuesta de PEOudin. – Martin