2012-08-24 16 views
10

Me gustaría pasar un objeto como parámetro a una función OnClick dentro de una cadena. Algo así como Follwing:javascript: pasar un objeto como argumento a una función onclick dentro de la cadena

function myfunction(obj,parentobj){ 
    var o=document.createElement("div"); 
    o.innerHTML='<input type="button" onclick="somelistener(' + obj + ')" />'; 
    parentobj.appendChild(o.firstChild); 
} 

Obviamente, esto no funciona. Alguien tiene alguna idea? ¡GRACIAS!

Una versión más completa, según lo sugerido por @Austin

<!DOCTYPE html> 
<html> 
<body> 
<style type="text/css"> 

</style> 
<p id="test">test</p> 
<p id="objectid"></p> 

<script> 
function test(s){ 
    document.getElementById("test").innerHTML+=s; 
} 

function somelistener(obj){ 
    test(obj.id); 
} 

function myfunction(obj,parentobj){ 
    var o=document.createElement("div"); 
    o.innerHTML='<input type="button" onclick="somelistener(' + obj + ')" />'; 

    o.onclick = function() { 
     someListener(obj) 
    } 
parentobj.appendChild(o.firstChild); 
} 

myfunction(document.getElementById("objectid"),document.getElementById("test")); 

</script> 

</body> 
</html> 
+0

@Austin no estoy seguro si entiendo su respuesta c orrect. Pero como probé en la versión completa anterior, tampoco funciona. ¿Podrías ver el problema? – Elizabeth

+0

@ scott.korin Thx Scott. Pero después de que cambié el uso de mayúsculas, todavía no funciona. – Elizabeth

+0

@Austin BTW, incluso si cambio o.onclicelo a o.firstChild.onclick, eso tampoco funciona, si eso es potencialmente un problema. – Elizabeth

Respuesta

18

El ejemplo anterior no funciona porque la salida de obj al texto es [Object object], por lo que en esencia, que está llamando someListener([Object object]).

Mientras que usted tiene la instancia del elemento en o, unirse a él es clic utilizando javascript:

function myfunction(obj,parentobj){ 
    var o=document.createElement("div"); 
    o.innerHTML='<input type="button" />'; 

    o.onClick = function() { 
     someListener(obj) 
    } 

    parentobj.appendChild(o.firstChild); 
} 

He creado un violín de trabajo para usted aquí: JSFiddle

-8

Simplemente pasarlo como esto :

o.innerHTML='<input type="button" onclick="somelistener(this)" />'; 
+0

Pasar 'esto' no funcionará. El objeto pasado es definitivamente * no * identificable por 'esto'. Downvoted. –

0
function myfunction(obj,parentobj){ 
     var o=document.createElement("div"); 
     o.innerHTML="<input type='button' onclick='somelistener("+JSON.stringify(obj)+")'/>"; 
            parentobj.appendChild(o.firstChild); 
      } 
    // my similar problem, function a was called in a jsonArray loop in the dataTable initiation 
    function a(data, type, obj) { 
         var str = ""; 
         str += "<span class='button-group'>"; 
         str +="<a onclick='chooseData1("+JSON.stringify(obj)+")'>[选择]</a>"; 
         str += "</span>"; 
         return str; 
              } 
function chooseData1(data){ 
         console.log(data); 
        } 
+0

Tengo un problema similar y lo soluciono de esta manera –

Cuestiones relacionadas