Foros del Web » Programando para Internet » Javascript »

Como permitir a un innerHtml hacer uso de imagenes para producir eventos ?

Estas en el tema de Como permitir a un innerHtml hacer uso de imagenes para producir eventos ? en el foro de Javascript en Foros del Web. Hola a todos, Tengo un problemilla el cual me encontre hoy no es nada del otro mundo pero quisiera saber como poder resolverlo. He aqui ...
  #1 (permalink)  
Antiguo 02/11/2007, 15:43
Avatar de eddwinpaz  
Fecha de Ingreso: noviembre-2007
Ubicación: Merida , Venezuela
Mensajes: 1.066
Antigüedad: 17 años
Puntos: 25
Pregunta Como permitir a un innerHtml hacer uso de imagenes para producir eventos ?

Hola a todos, Tengo un problemilla el cual me encontre hoy no es nada del otro mundo pero quisiera saber como poder resolverlo.

He aqui el codigo. Javascript
el problema se presenta cuando intento eliminar el campo de texto lo que ocurre es que si pongo solo la imagen. No me elimina el campo pero si le agrego el texto Eliminar al lado de la imagen si lo puedo eliminar. Por que ? no se muchas gracias por sus respuestas que tengan exelente dia y suerte y exitos.!!!

Deseo poder solo usar la imagen y descartar el texto
o.O--> a.innerHTML = 'Eliminar <img src="12_remove_item.gif" border=\"0\"

<script type="text/javascript">
var numero = 0;

// Funciones comunes
c = function (tag) { // Crea un elemento
return document.createElement(tag);
}
d = function (id) { // Retorna un elemento en base al id
return document.getElementById(id);
}
e = function (evt) { // Retorna el evento
return (!evt) ? event : evt;
}
f = function (evt) { // Retorna el objeto que genera el evento
return evt.srcElement ? evt.srcElement : evt.target;
}

addField = function () {
container = d('files');

span = c('SPAN');
span.className = 'file';
span.id = 'file' + (++numero);

field = c('INPUT');
field.name = 'opciones[]';
field.type = 'text';

a = c('A');
a.name = span.id;
a.href = '#';
a.onclick = removeField;
a.innerHTML = 'Eliminar <img src="12_remove_item.gif" border=\"0\" title=\"Eliminar" alt=\"Eliminar">';

span.appendChild(field);
span.appendChild(a);
container.appendChild(span);
}
removeField = function (evt) {
lnk = f(e(evt));
span = d(lnk.name);
span.parentNode.removeChild(span);
<!-- span.parentNode.child.removeChild(span); -->
}
</script>
  #2 (permalink)  
Antiguo 02/11/2007, 17:04
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años, 7 meses
Puntos: 1284
Re: Como permitir a un innerHtml hacer uso de imagenes para producir eventos ?

Hola:

Por qué haces las cosas tan complejas... esas funciones c, d, e... solo sirven para complicar su lectura.

Si quieres borrar algo asignado con innerHTML, es mejos borrarlo también con innerHTML (="")... con removeChild solo quitas un nodo, y a simple vista estás metiendo 2... el nodo de texto "Eliminar " y el tag img... si quieres insertar lo que quieres como nodos deberías crear el nodo de texto (createTextNode('Eliminar ')) y el nodo de la imagen (createElement('img'))...

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #3 (permalink)  
Antiguo 03/11/2007, 01:25
Avatar de eddwinpaz  
Fecha de Ingreso: noviembre-2007
Ubicación: Merida , Venezuela
Mensajes: 1.066
Antigüedad: 17 años
Puntos: 25
Re: Como permitir a un innerHtml hacer uso de imagenes para producir eventos ?

No entiendo en realidad pudieras explicarme un poco mas porfavor Muchas gracias por tu colaboracion.
  #4 (permalink)  
Antiguo 03/11/2007, 01:52
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años, 7 meses
Puntos: 1284
Re: Como permitir a un innerHtml hacer uso de imagenes para producir eventos ?

Hola:

La verdad es que sigo pensando que es muy compleja tu forma de programar... intentando enterarme de lo que hace tu código, me parece que quieres referenciar un elemento cuyo id es igual al atributo name de un link creado dinámicamente... ese atributo suele dar problemas... así que si es igual al id de su nodo padre, tal vez sea mejor que uses parentNode.id

Sobre borrar con innerHTML sería:

span.parentNode.innerHTML = "";

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #5 (permalink)  
Antiguo 03/11/2007, 01:58
Avatar de eddwinpaz  
Fecha de Ingreso: noviembre-2007
Ubicación: Merida , Venezuela
Mensajes: 1.066
Antigüedad: 17 años
Puntos: 25
Re: Como permitir a un innerHtml hacer uso de imagenes para producir eventos ?

Ok no pretendo que me digas como hacerlo pero he modificado el codigo de tal manera que sea entendible. saludos no logro entender por que dices que tengo encapsulados los nodos. Bueno aqui esta el Codigo.

<script type="text/javascript">
var numero = 0;

addField = function () {
container = document.getElementById('files');

span = document.createElement('span');
span.className = 'file';
span.id = 'file' + (++numero);

field = document.createElement('input');
field.name = 'opciones[]';
field.type = 'text';

a = document.createElement('a');
a.name = span.id;
a.href = '#';
a.onclick = removeField;
a.innerHTML = 'Eliminar';

span.appendChild(field);
span.appendChild(a);
container.appendChild(span);
}
removeField = function (evt) {

lnk = evt.srcElement ? evt.srcElement : evt.target;
span = document.getElementById(lnk.name);
span.parentNode.removeChild(span);

}
</script>

Lo que hace este script es agregar inputs por medio de addField y con removeField los elimino de el formulario ... ahora vi en un codigo de una pagina web hacen esto.. pero usando un submit form . con type=image osea es practicamente un input con fondo de imagen. Lo intente pero no me sirve. aqui esta lo que vi.

add_item: function(el)
{
var n=el.id.substr(3);
if ($('on_'+n).value.strip()!='')
{
var items=ProfileEdit.load_items(n);
var esc=Fix.escape($('on_'+n).value);

if (!items['exist'][esc])
{
var s=document.createElement('span');
s.innerHTML=' '+$('on_'+n).value.escapeHTML()+' <input name="remove['+n+']['+esc+']" type="image" class="remove_item" src="'+JSRoot+'i/12_remove_item.gif" width="12" height="12" />\
<input type="hidden" name="add['+n+'][]" value="'+$('on_'+n).value.replace(/"/gi,'&quot;')+'" />';
$('items_'+n).appendChild(s);
}
$('on_'+n).value='';
}
},

remove_item: function(el)
{
var v=ProfileEdit.get_name(el.name);
var id=Fix.idify(v);

if (!$(id))
{
var i=document.createElement('input');
i.type='hidden';
i.id=id;
i.name=el.name;
i.value=1;

el.parentNode.parentNode.appendChild(i);
}

$(el.parentNode).remove();
  #6 (permalink)  
Antiguo 03/11/2007, 01:58
Avatar de eddwinpaz  
Fecha de Ingreso: noviembre-2007
Ubicación: Merida , Venezuela
Mensajes: 1.066
Antigüedad: 17 años
Puntos: 25
Re: Como permitir a un innerHtml hacer uso de imagenes para producir eventos ?

Como dije anteriormente quiero que una imagen me permita realizar el evento de eliminar el input de el formulario.
  #7 (permalink)  
Antiguo 03/11/2007, 15:32
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años, 7 meses
Puntos: 1284
Re: Como permitir a un innerHtml hacer uso de imagenes para producir eventos ?

Cita:
Iniciado por eddwinpaz Ver Mensaje
Como dije anteriormente quiero que una imagen me permita realizar el evento de eliminar el input de el formulario.
Para eliminar cualquier elemento sencillamente debes saber identificarlo, y poner el código que ya sabes (yo mismo lo había puesto en las FAQs...) pero la referencia, cuando depende de otro elemento dinámico con atributo name puede dar problemas... ak input simplemente ponle un id, que es lo más fácil de referenciar...

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:40.