type style removeattribute removeattr ejemplo disabled attribute javascript jquery onclick attributes

javascript - removeattribute - removeattr style jquery



JavaScript: cambiar el valor de onclick con o sin jQuery (7)

Llegó con una solución rápida y sucia a esto. Solo usé <select onchange=''this.options[this.selectedIndex].onclick();> <option onclick=''alert("hello world")'' ></option> </select>

Espero que esto ayude

Me gustaría cambiar el valor del atributo onclick en un ancla. Quiero configurarlo en una nueva cadena que contiene JavaScript. (El servidor proporciona esa cadena al código JavaScript del lado del cliente y puede contener lo que pueda poner en el atributo onclick en HTML). He aquí algunas cosas que probé:

  • El uso de jQuery attr("onclick", js) no funciona con Firefox e IE6 / 7.
  • El uso de setAttribute("onclick", js) funciona con Firefox e IE8, pero no con IE6 / 7.
  • Usando onclick = function() { return eval(js); } onclick = function() { return eval(js); } no funciona porque no se le permite usar return código se pasa a eval() .

¿Alguien tiene una sugerencia para configurar el atributo onclick para que funcione para Firefox e IE 6/7/8? También vea abajo el código que usé para probar esto.

<html> <head> <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.js"></script> <script type="text/javascript"> $(document).ready(function(){ var js = "alert(''B''); return false;"; // Set with JQuery: doesn''t work $("a").attr("onclick", js); // Set with setAttribute(): at least works with Firefox //document.getElementById("anchor").setAttribute("onclick", js); }); </script> </head> <body> <a href="http://www.google.com/" id="anchor" onclick="alert(''A''); return false;">Click</a> </body> </html>


No debe usar onClick más si está usando jQuery. jQuery proporciona sus propios métodos para adjuntar y vincular eventos. Ver .click()

$(document).ready(function(){ var js = "alert(''B:'' + this.id); return false;"; // create a function from the "js" string var newclick = new Function(js); // clears onclick then sets click using jQuery $("#anchor").attr(''onclick'', '''').click(newclick); });

Eso debería cancelar la función onClick y también mantener su "javascript de una cadena".

Lo mejor sería eliminar onclick="" del elemento <a> en el código HTML y cambiar al uso del método Unobtrusive de vincular un evento para hacer clic.

Usted también dijo:

Usando onclick = function() { return eval(js); } onclick = function() { return eval(js); } no funciona porque no se le permite usar retorno en el código pasado a eval ().

No, no lo hará, pero onclick = eval("(function(){"+js+"})"); envolverá la variable ''js'' en un recinto de función. onclick = new Function(js); Funciona también y es un poco más limpio para leer. (note la capital F) - vea la documentación en los constructores de Function()


Por cierto, sin JQuery esto también podría hacerse, pero obviamente es bastante feo ya que solo considera IE / non-IE:

if(isie) tmpobject.setAttribute(''onclick'',(new Function(tmp.nextSibling.getAttributeNode(''onclick'').value))); else $(tmpobject).attr(''onclick'',tmp.nextSibling.attributes[0].value); //this even supposes index

De todos modos, solo para que la gente tenga una idea general de lo que se puede hacer, ya que estoy seguro de que muchos se han topado con esta molestia.


Si no desea realmente navegar a una nueva página, también puede tener su ancla en algún lugar de la página como esta.

<a id="the_anchor" href="">

Y luego, para asignar su cadena de JavaScript al clic del ancla, ponga esto en otro lugar (es decir, el encabezado, más adelante en el cuerpo, lo que sea):

<script> var js = "alert(''I am your string of JavaScript'');"; // js is your string of script document.getElementById(''the_anchor'').href = ''javascript:'' + js; </script>

Si tiene toda esta información en el servidor antes de enviar la página, también puede simplemente colocar el JavaScript directamente en el atributo href del ancla, de este modo:

<a href="javascript:alert(''I am your script.''); alert(''So am I.'');">Click me</a>


Tenga en cuenta que siguiendo la idea de gnarf también puede hacer:

var js = "alert(''B:'' + this.id); return false;";<br/> var newclick = eval("(function(){"+js+"});");<br/> $("a").get(0).onclick = newclick;

Eso establecerá el onclick sin desencadenar el evento (tuvo el mismo problema aquí y me tomó un tiempo descubrirlo).


Un problema con Jquery es que la función de clic no reconoce el clic manual codificado desde el html.

Entonces, tienes que elegir. Configure todos sus manejadores en la función init o todos ellos en html.

El evento click en JQuery es la función click $ ("myelt"). Click (function ....).