Estoy tratando de crear un script que, cuando hace clic en un ancla, una función $ .get obtendrá la href del ancla y luego se eliminará la href, pero no puedo editar nada sobre el ancla desde el elemento de get interno. Ejemplo:

// make anchor disappear for example (doesn't work)
$('.belovedanchor').click(function(e) {
  $.get($(this).attr('href')).done(function() {
    $(this).hide();
  });
});

// make an anchor disappear using a function (doesn't work too)
$('.belovedanchor').click(function(e) {
  function do() { $(this).hide(); };
  $.get($(this).attr('href')).done(function() {
    do();
  });
});

No entiendo por qué $ (esto) cambia para funcionar con la función $ .get en lugar del evento .click.

¿Cómo lo harían ustedes?

0
Flerex 29 ago. 2014 a las 20:47

2 respuestas

La mejor respuesta

Tienes un par de problemas Editar: Solo un problema: ahora veo en su comentario a continuación que belovedanchor no es el selector real en su código.

Primero, su selector jQuery para el controlador de eventos click es probablemente incorrecto. Cambie $('belovedanchor') a $('.belovedanchor') o $('#belovedanchor') dependiendo de si el ancla es identificable por la clase o la ID del elemento respectivamente.

Segundo, this en la función de devolución de llamada do no se refiere al ancla. En JavaScript, el alcance se establece en el nivel de función, por lo que cada vez que declare una nueva función, this se referirá a ese nuevo alcance.

Haga esto en su lugar:

$('belovedanchor').click(function(e) {
  var anchor = $(this);
  function do() { anchor.hide(); };
  $.get($(this).attr('href')).done(function() {
    do();
  });
});

Simplificada:

$('belovedanchor').click(function(e) {
  var anchor = $(this);
  $.get(anchor.attr('href')).done(function() {
    anchor.hide();
  });
});
1
Elliot B. 29 ago. 2014 a las 17:00

Esto puede funcionar correctamente

$('.belovedanchor').click(function() {
  var selectedancor = $(this);
  var myurl = $(this).attr('href');
  $.get(myurl, function() {
     selectedanchor.hide();
  });
});
0
user3349436 29 ago. 2014 a las 17:02