Estoy tratando de anular el comportamiento predeterminado de una etiqueta de anclaje para poder cargar una página web en mi servidor en el div existente, en lugar de una nueva pestaña o ventana.
hasta ahora tengo:
myContainer.click(function(){ event.preventDefault(); $('a').click(function(){ var link = $(this).attr('href'); myContainer.load(link); }); });En Chrome, tengo que hacer clic en el enlace dos veces antes de que haga algo, en IE y FF no funciona en absoluto y actualiza la página con el nuevo enlace.
Cualquier ayuda es muy apreciada.
¿No debería ser solo:
$('a').click(function(e) { e.preventDefault(); myContainer.load(this.href); });Su código asigna un controlador de clics dentro de un controlador de clics. Entonces, el primer clic adjuntará el controlador de clics al enlace, y el segundo clic (en el enlace) ejecutará el nuevo controlador de clics.
Parece que solo necesita un controlador de clic. Si los enlaces se agregan dinámicamente, puede usar .on() (el sucesor de .live y .delegate ):
myContainer.on('click', 'a', function(e) { e.preventDefault(); myContainer.load(this.href); }); // or $(document).on('click', 'a', function(e) { e.preventDefault(); myContainer.load(this.href); });olvidaste pasar en el evento:
myContainer.click(function(event){ event.preventDefault(); $('a').click(function(){ var link = $(this).attr('href'); myContainer.load(link); }); });intenta reordenarlos:
myContainer.ready(function(){ $('a').click(function(event){ event.preventDefault(); var link = $(this).attr('href'); myContainer.load(link); }); });