当数据附加到div时,如何在JavaScript函数中将JSON数据作为参数传递?
jQuery+JavaScript+Rails 4当数据附加到div时,如何在JavaScript函数中将JSON数据作为参数传递?,javascript,jquery,ruby-on-rails-4,Javascript,Jquery,Ruby On Rails 4,jQuery+JavaScript+Rails 4 prefix = "onward_" json_data = {"367278": {"bus_schedules": { "id": 367278, "origin_id": 134, "destination_id": 506 },
prefix = "onward_"
json_data = {"367278":
{"bus_schedules":
{ "id": 367278,
"origin_id": 134,
"destination_id": 506
},
"drop_points": null,
"board_points": null,
"operator_name": "ABC"
}
}
json_data1 = JSON.stringify(json_data);
html = '<a href="#" id="'+prefix+'active_travel_filter_'+
operator_ids[i]
+'"onclick="removeTravelFilter('
+'\''+prefix+'\''+',\'travels\''+',\''
+json_data1+'\',\''+json_data1+'\')"
value="'+operator_ids[i]+'">'
+getOperatorName[operator_ids[i]]+'</a>'
console.log(html);
$("#active_fiters_blk").append(html);
它应该是一个内联脚本,因为我需要每个单独的
onclick
事件。我会维护一个字典,将锚id名称与其对应的json数据关联起来
window.dataCache = {
"onward_active_travel_filter_90": {...},
...
}
单击元素后,我将获取所需的json对象
$('a').click(function(){
var id = this.id;
var jsd = dataCache[id];
//pass to target function
foo(jsd);
});
现在,如果锚添加到页面dom中的时间稍晚,我必须注意适当地附加事件处理程序
在jquery中,我们可以只使用处理程序
说明:
嗯,我们通常做一些类似于$('element')的事情代码>。这通常在jquery dom就绪事件中执行:
$(function(){
$('element').click(function(){...});
});
一旦dom准备好使用jquery,就会执行dom就绪事件中的代码拉伸。因此,click事件将附加到DOM中当时存在的任何元素
任何后续将元素添加到网页中的操作,都不会附加click事件处理程序
但是我们想要这样的功能
因此,我们必须手动处理它。意思是创建元素
适当地连接事件单击处理程序,然后将其添加到DOM中
另一种方法是jQuery.on()
方法。然而,它的功能不同于上面所描述的。它侦听在目标容器上“冒泡”的单击事件
请阅读.on()
的文档以了解更多信息。您尝试插入的HTML是以下字符串:
当您将其放入DOM中时,浏览器会被onclick
部分的参数弄糊涂:onclick=“removeTravelFilter('forward_uu','travels',“{”
)最后一个引号(“
)将被解释为onclick
参数的结尾
如果在JavaScript中切换引号,如下所示:
html = "<a href='#' id='"+prefix+"active_travel_filter_"+operator_ids[i]+"' onclick='removeTravelFilter("+"\""+prefix+"\""+",\"travels\""+","+json_data1+","+json_data1+")' value='"+operator_ids[i]+"'>"+getOperatorName[operator_ids[i]]+"</a>"
html=“”
那你应该没事了:
我并不是说这是将这些参数传递给函数的最佳方式,但它是有效的。为什么要/需要将其存储为数据属性?这通常用于从服务器传输数据。我需要将完整的json_数据传递给另一个js函数,在那里我将验证这些内容。不要使用内联事件处理程序或使用HTM构建UIL字符串。创建适当的DOM元素并使用JavaScript绑定事件处理程序。这样,您甚至不必将数据转换为JSON。您当前的方法只会使您以后进行更改更加困难。若要了解有关事件处理程序的更多信息,请参阅。若要了解有关DOM的更多信息:。由于您使用的是jQuery,您可能需要o从阅读jQuery教程中获益:。我对javascript和jQuery不熟悉。请您详细说明一下。此json_数据来自以前的js函数。它来自rails view.html.erb by…..对。因此,您编写的代码处于一种for循环中?何时调用?是的,我尝试过这个。在函数上,但您知道我是一个p正在结束一个链接,当我点击该链接时,它总是使用最后一个id…但我希望每个链接上都有一个点击事件…对。在参数列表出现之后,operator\u id
variable是什么?SyntaxError:missing….moveTravelFilter(“forward”、“travels”、“{“367278”):{“bus\u schedules”:{“id”:367278,"o、 ..@user3410226:哦,看起来我在代码中犯了一个小错误,你能再试一次吗?我编辑了我答案的代码。是的,它工作正常,但你说的是最佳实践……你能告诉我你的最佳实践吗this@user3410226:最佳实践是将json存储在JavaScript变量中,并在函数调用som中引用该变量例如:onclick='removeTravelFilter(“向前”,“旅行”,myJson,myJson)