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 usarreturn
código se pasa aeval()
.
¿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 ....).
simplemente use el método de enlace jQuery! jquery-selector! .bind (''evento'',! fn!);