Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将对象传递给函数_Javascript_Jquery_Html - Fatal编程技术网

Javascript 将对象传递给函数

Javascript 将对象传递给函数,javascript,jquery,html,Javascript,Jquery,Html,我有一组在JavaScript函数中动态创建的元素。我希望创建的每个都可以单击,并调用一个函数,该函数在单击时将参数作为对象 我的问题是,当我传递对象时,我得到了objAddQuestion的错误undefined。如何将对象传递给函数 for (var j = 0; j < lstQuestions.length; j++) { var objAddQuestion = new Object(); objAddQuestion = lstQuestions[j];

我有一组在JavaScript函数中动态创建的
元素。我希望创建的每个
都可以单击,并调用一个函数,该函数在单击时将参数作为对象

我的问题是,当我传递对象时,我得到了
objAddQuestion
的错误
undefined
。如何将对象传递给函数

 for (var j = 0; j < lstQuestions.length; j++) {
    var objAddQuestion = new Object();
    objAddQuestion = lstQuestions[j];
    html += ' <span onclick="addQuestion(objAddQuestion)" class="badge addQ">' +
        ' Add</span>';
}

lstQuestions
是一个对象列表。

要实现这一点,您可以将对象存储在jQuery的
数据
缓存中,存储在您创建的每个
span
上。然后,您可以使用一个不引人注目的委托事件处理程序在单击元素时再次读取它们。试试这个:

var-lstQuestions=[
{标签:'foo'},
{标签:'bar'},
{标签:'fizz'},
{标签:“嗡嗡声”}
];
var spans=lstQuestions.map(函数(o){
返回$(''){
“类”:“徽章”,
“文本”:o.label
}).数据(“问题”,o);
})
$(“#问题”)。在('click','badge',function()上{
var obj=$(this.data('question');
控制台日志(obj);
}).附加(跨度)
span{
填充物:5px;
}

您可能希望逐个生成
span
元素,然后将其附加到容器中

var container=document.getElementById('container');
问题=[
“问题A”
“问题B”
“问题C”
];
对于(var j=0;j

您说过
lstQuestions
是一个对象列表。这意味着您可能不想将问题嵌入
onclick
属性处理程序中

相反,我建议使用现代事件处理,而不是
onclick
属性。例如,我可能会在
span
上包含一个问题标识符,然后使用事件委托处理事件

注意:您已经标记了您的问题,但是您的问题中没有明显的jQuery,所以我没有在第一个解决方案中使用它。不过,你当然可以这样做,而且授权会更简单;请参见下面的水平线下方

var-lstQuestions=[
{
id:1,
案文:“问题1”,
详情:“问题1的详情”
},
{
id:2,
案文:“问题2”,
详情:“问题2的详情”
},
{
id:3,
案文:“问题3”,
详情:“问题3的详情”
}
];
var html=“”;
对于(var j=0;j

如果对象是全局对象,请尝试:

function addQuestion(obj) {
    window[obj];
}
对于本地对象,请尝试,例如:

function addQuestion(obj) {
    lstQuestions[obj];
}
以及:

for(var j=0;j
@Roy
addQuestion([object object])
?@Roy,您可能想添加
JSON.stringify
?:)@VLAZ-否,因为OP在创建后的行上覆盖了它。看起来像一个字符串。什么是
lstQuestions
?是字符串列表吗?物体?还有什么吗?@RawanMansour-请给我们看一下。但是,如果我试图在跨度内写一些东西,但它没有出现,我在单击“添加”时遇到了一个问题,如:$(“.qText”).text(question.QuestionNo);qtext是单击“添加”时附加的另一个跨度question@RawanMansour-那将是一个完全无关的问题。我建议尝试一下(
span
s是不可编辑的,除非你在其中添加
contenteditable
),做研究,等等,如果你不能解决它,就发布一个新问题,并附上问题的答案。
function addQuestion(obj) {
    lstQuestions[obj];
}
for (var j = 0; j < lstQuestions.length; j++) {
    var objAddQuestion = new Object();
    objAddQuestion = lstQuestions[j];
    html += ' <span onclick="addQuestion('+j+')" class="badge addQ">' +
        ' Add</span>';
}