Pregunta

Estoy tirando de mi pelo !! grrr ...

Este parece a trabajar:

//get all the foo and bar links that point to a named anchor:
$("a.foo,a.bar").filter("[href^=#]").click
(
    function()
    {
        doSomething( $(this).attr("href").substr(1) );
        return false;
    }
);

Cuando registro la salida de '$ (this) .attr ( "href"). Substr (1)' a la consola veo la anchorname sin el hash, para todos los enlaces pertinentes. Todo bien. Pero dentro doSomething (), typeof () de dice que tengo una cadena - pero es vacío !! ¿Por qué? !!

function doSomething(str)
{
    //log str : it's empty!!
}

Por lo general, poco después de que publico una pregunta aquí es demasiado extraño para cualquier persona que me ayude o me averiguar mi propia estupidez más tarde. Espero que alguien pueda ayudar esta vez! : - (

============== SOLVED =====================

********* Fue mi propia estupidez **********

Dentro de doSomething lo primero que hizo fue mi código:

if(str = "") return;

(hiera frente). Gracias a todos por hacerme mirada a esto de una manera diferente

¿Fue útil?

Solución

No puedo reproducir este Suena como un problema con el código doSomething sí mismo -. Hacer un código rápido revisar para asegurarse de que está apuntando a la función correcta y que no se está modificando el argumento antes de su uso.

Otros consejos

Nota: Esta no es la respuesta correcta! Pero voy a dejarlo aquí, en caso de que sea de utilidad para otros usuarios del chisporroteo.


Es un error en Arden (la biblioteca de selección utilizado por jQuery).

El problema es cuando se accede a link.href en JavaScript no obtiene el texto del atributo href, se obtiene la URL absoluta resuelto. Naturalmente, esto comienza con http:// y no #.

Cuando se llama a link.attr('href') jQuery detecta el caso especial y se aplica una solución. Cuando se utiliza un selector, chisporroteo no lo hace. Se trata de:

attrHandle: {
    href: function(elem){
        return elem.getAttribute("href");
    }
},

pero esta solución no funciona en IE hasta la versión 7, ya que hacen getAttribute igual a sólo conseguir la propiedad de JavaScript. [La solución correcta sería utilizar getAttributeNode su lugar, o olfatear IE y utilizar la extensión getAttribute('href', 2) propietaria.]

Así que el motor de selección se http://... para el atributo href y por supuesto esto no coincide con ^=#.

Si lo hace usted mismo con una función de filtro que debería funcionar:

$('a.foo, a.bar').filter(function() {
    return $(this).attr('href').substring(0, 1)==='#';
})...

tratar substr(0) primer carácter está en el índice 0 http://www.w3schools.com/jsref /jsref_substr.asp

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top