2012-05-07 11 views
17

Esta pregunta viene muy de cerca a lo que busco: Replace an Attribute in the Tweet Button with Jquerycambiar dinámicamente Tweet Button "texto" datos contenidos

Sin embargo, the suggested solution obras sólo una vez. Es decir, no puedo lo uso en mi interruptor declaración como esta:

switch(element.id) 
    { 
     case "t1": 
      $(document).ready(function(){ 
       $('a[data-text]').each(function(){ 
        $(this).attr('data-text', Text_Variant_1); 
       }); 
       $.getScript('http://platform.twitter.com/widgets.js'); 
      }); 
      break; 
     case "t2": 
      $(document).ready(function(){ 
       $('a[data-text]').each(function(){ 
        $(this).attr('data-text', Text_Variant_2); 
       }); 
       $.getScript('http://platform.twitter.com/widgets.js'); 
      }); 
     ... 
    } 

Lo que sucede es que el atributode texto de datos se establece de acuerdo a lo que ocurra primero caso y no cambia después.

¿Cómo puedo cambiar data-text atributo de un Botón Tweet tantas veces como sea necesario?

Actualización: aquí está la página que estoy trabajando: http://zhilkin.com/socio/en/

El Rasgos tabla se puede omitir con seguridad. Lo que quiero hacer con la tabla Sociotypes es que cuando hace clic en un tipo, el data-text del botón Tweet debajo de la descripción de la derecha debe modificarse en consecuencia.

Ahora funciona así: si cierro o hago clic en "Don Quijote", entonces data-text se establece en "... Don Quixote ...", y se mantiene igual si hago clic "Dumas" más tarde. Y viceversa: si cierro o hago clic en "Dumas", entonces data-text se establece en "... Dumas ..." y no cambia si hago clic en "Don Quixote". (Otros tipos están vacíos en este momento).

Por lo tanto, el botón Tweet solo se cambia la primera vez que ejecuto el script, pero necesito que se actualice tantas veces como cambie el tipo.

+0

¿Cuál es la variable 'switch'? ¿Puede publicar algún código más relevante? Además, ¿por qué '' 2 "' entre comillas y '1' sin comillas? Su prolbem podría estar allí ... – elclanrs

+0

La variable de cambio es un elemento fijo. De acuerdo con cuál de los elementos se mantiene, me gustaría establecer el atributo de texto de datos del botón Tweet. La instrucción switch funciona (la estoy usando también para otras cosas), pero no puedo usarla para cambiar el texto de datos varias veces (se establece solo una vez y luego no cambia). – Mikhail

Respuesta

37

tuve problemas con esto por un par de horas de esta mañana, pero finalmente tengo trabajo! El problema es esencialmente que solo puede incluir el script de twitter widgets.jsuna vez en la página, y esa secuencia de comandos evalúa el atributo data-text en carga. Por lo tanto, en su ejemplo, establece dinámicamente el atributo data-textantes de cargando el script, que funcionará como se esperaba. Sin embargo, no puede hacer más actualizaciones ya que el script ya se ejecutó.

Vi this article sugiriendo que puede llamar al twttr.widgets.load() nuevamente en el tiempo de ejecución para volver a evaluar y volver a procesar los botones, sin embargo, eso no funcionó para mí. ¡Esto se debe a que esa función reevalúa las etiquetas <a>, no las etiquetas !

Así que la solución, como pointed out here, es eliminar por completo el procesada desde el DOM, a continuación, hacer un nuevo elemento <a> con todos los atributos adecuados antes de llamar twttr.widgets.load() para finalmente volver a evaluarlo y convertirlo en un .

¡Por favor vea this fiddle para un ejemplo de trabajo!

+0

Se ve exactamente como lo que necesito. Intentaremos implementar esta solución. ¡Muchas gracias! – Mikhail

+0

¡Funciona! pero Firefox y Chrome están bloqueando la ventana emergente :( Al agregar esto se evitará el bloqueo: onclick = "return! window.open (this.href, 'tweet', 'menubar = no')" – joan16v

0

dado que está utilizando each bucle puede utilizar if declaraciones en su lugar:

$(document).ready(function(){ 
     $('a[data-text]').each(function(){ 
      if (theCase == 1) { 
      $(this).attr('data-text', Text_Variant_1); 
      } 
      else if (theCase == 2) { ... } 
     }) 
}); 
+0

No creo que usar if/else en lugar de cambiar pueda cambiar algo. Cualquiera que sea el caso que ocurra primero (puede ser "t1", puede ser "t2", etc.), el texto de datos se establece en el valor correspondiente y luego no cambia de nuevo (si ocurre otro caso). – Mikhail

+0

es mejor ver el marcado, creo que debería usar otro método para lograr el resultado deseado. – undefined

+0

He agregado un enlace a la página en vivo y una breve explicación de lo que está sucediendo. ¡Espero eso ayude! – Mikhail

1

También puede utilizar la llamada API de Twitter createShareButton:

function callAsRequired(){ 
    var nodeID = 'YourTwitterNodeID' 

    //Remove existing share button, if it exists. 
    var myNode = document.getElementById(nodeID); 
    while (myNode.firstChild) { 
    myNode.removeChild(myNode.firstChild); 
    } 

    //Create button and customise 
    twttr.widgets.createShareButton(
    'http://your.custom.url.here/', 
    document.getElementById(nodeID), 
    { 
     count: 'none', 
     text: 'Your custom tweet here' 
    }; 
}