我想将一个对象作为参数传递给字符串中的Onclick函数。像下面这样的东西:
function myfunction(obj,parentobj){
var o=document.createElement("div");
o.innerHTML='<input type="button" onclick="somelistener(' + obj + ')" />';
parentobj.appendChild(o.firstChild);
}
显然,这不起作用。任何人有任何想法? THX!
@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 :(得分:19)
上述示例不起作用,因为obj
对文字的输出为[Object object]
,所以基本上,您正在调用someListener([Object object])
。
当您在o
中拥有该元素的实例时,使用javascript绑定到它的单击:
function myfunction(obj,parentobj){
var o=document.createElement("div");
o.innerHTML='<input type="button" />';
o.onClick = function () {
someListener(obj)
}
parentobj.appendChild(o.firstChild);
}
我在这里为你创造了一个工作小提琴:JSFiddle
答案 1 :(得分:2)
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);
}
答案 2 :(得分:1)
只需使用 JSON.strigify(obj) 将对象字符串化并作为参数传入 onclick 函数,它将被直接解析并作为 Object 在函数中接收。
function myfunction(obj,parentobj){
var o=document.createElement("div");
var stringifiedObj = JSON.stringfy(obj)
o.innerHTML='<input type="button" onclick=`somelistener(${stringifiedObj})` />';
parentobj.appendChild(o);
}
function somelistener(obj){
console.log(typeof obj) //Object
}
答案 3 :(得分:1)
老问题的答案我不太明白,但最简单的解决方案是结合函数encodeURIComponent
和JSON.stringify
,即您将对象字符串化,然后转义那些特殊字符,然后然后反转函数内部的过程
var htmlStr = `<button onclick="myFunctions('${encodeURIComponent(JSON.stringify(obj))}')"></button>`
function myFunctions(obj) {
obj = JSON.parse(decodeURIComponent(obj))
// do something with obj
}
var obj = {a: 'hey there', b: 1}
var htmlStr = `<button onclick="myFunctions('${encodeURIComponent(JSON.stringify(obj))}')">Click me</button>`
$('#mydiv').append(htmlStr)
function myFunctions(obj) {
obj = JSON.parse(decodeURIComponent(obj))
console.log(obj.a)
console.log(obj.b)
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="mydiv"></div>
答案 4 :(得分:-8)
就这样传递它:
o.innerHTML='<input type="button" onclick="somelistener(this)" />';