var funcs = [];
// let's create 3 functions
for (var i = 0; i < 3; i++) {
// and store them in funcs
funcs[i] = function() {
// each should log its value.
console.log("My value: " + i);
};
}
for (var j = 0; j < 3; j++) {
// and now let's run each one to see
funcs[j]();
}Run Code Online (Sandbox Code Playgroud)
它输出这个:
我的价值:3
我的价值:3
我的价值:3
而我希望它输出:
我的价值:0
我的价值:1
我的价值:2
使用事件侦听器导致运行函数的延迟时,会出现同样的问题:
var buttons = document.getElementsByTagName("button");
// let's create 3 …Run Code Online (Sandbox Code Playgroud)例如,我有一个从AJAX响应生成的10个标签:
<a href="#" id="b1">b1</a>
<a href="#" id="b2">b2</a>
<a href="#" id="b3">b3</a>
<a href="#" id="b4">b4</a>
<a href="#" id="b5">b5</a>
<a href="#" id="b6">b6</a>
<a href="#" id="b7">b7</a>
<a href="#" id="b8">b8</a>
<a href="#" id="b9">b9</a>
<a href="#" id="b10">b10</a>
Run Code Online (Sandbox Code Playgroud)
我需要通过循环为每个人分配onclick事件:
for(i=1; i<11; i++) {
document.getElementById("b"+i).onclick=function() {
alert(i);
}
}
Run Code Online (Sandbox Code Playgroud)
这不起作用,它只分配onclick到最后一个标签并提醒"11".我怎样才能让它发挥作用?我宁愿不使用jQuery.
在JS中这似乎是可能的。
添加带有URL的独立弹出窗口很容易:
library(leaflet)
content <- paste(sep = "<br/>",
"<b><a href='http://www.samurainoodle.com'>Samurai Noodle</a></b>"
)
leaflet() %>% addTiles() %>%
addPopups(-122.327298, 47.597131, content,
options = popupOptions(closeButton = FALSE)
)
Run Code Online (Sandbox Code Playgroud)
添加标记时也很简单,当单击该标记时,将在弹出窗口中提供一个URL:
leaflet() %>% addTiles() %>%
addMarkers(-122.327298, 47.597131, popup = content,
options = popupOptions(closeButton = FALSE)
)
Run Code Online (Sandbox Code Playgroud)
也许有一些习惯传递给传单了...吗?
最后,自定义JS函数如何为每个地图标记显示不同的URL?考虑示例data.frame:
df <- data.frame(url = c("/sf/ask/tagged/python/",
"/sf/ask/tagged/r/")),
lng = c(-122.327298, -122.337298),
lat = c(47.597131,47.587131))
Run Code Online (Sandbox Code Playgroud)
* 之前曾有人问过这个问题,但我在这里再问一个问题,并举一个最小的,可复制的例子。
我想做的事
我想缩短代码。此Drum Play应用程序通过按某些键或用鼠标单击来播放声音。
它可以工作,但是单击事件的代码太长,因为我多次重复了相同的代码。
谁能使它更清洁或更短?
我尝试过的
我尝试了循环,如下所示:
document.querySelector(`div[data-key="${dataKeys[i]}"]`).addEventListener...
Run Code Online (Sandbox Code Playgroud)
但这没有用。
我的当前代码
这是我的代码。
document.querySelector(`div[data-key="${dataKeys[i]}"]`).addEventListener...
Run Code Online (Sandbox Code Playgroud)
如果有人可以使我的代码更简洁或更短,我将不胜感激。
我从dynamodb获取一个json数组,并在遍历按钮时将addEventListener()添加到按钮。但是只有最后一个按钮对此作出响应。
这是在SO上问过的,并且是google上的首个热门产品,因此我将循环更改为使用闭包。但是我仍然不能将addEventListener()附加到最后一个按钮之外。
我最初尝试这样做:
for (var i = 0; i < array_length; ++i) {
(function(j) {
var obj = data.Items[j];
adiv.innerHTML = adiv.innerHTML + "<div class='row'><div class='center-div six columns'>" + obj.Event + ", " + obj.Location + "</div></div>";
adiv.innerHTML = adiv.innerHTML + "<div class='row'><div class='center-div six columns'>" + obj.Date + ", " + obj.Time + "</div></div>";
adiv.innerHTML = adiv.innerHTML + "<div class='row'><div class='center-div six columns'><button id='yay_button_" + i + "' class='button-primary'>Deltag</button></div></div>";
var elem = document.getElementById('yay_button_' + j);
elem.addEventListener('click', function() …Run Code Online (Sandbox Code Playgroud) javascript ×5
arrays ×1
closures ×1
htmltools ×1
htmlwidgets ×1
json ×1
leaflet ×1
loops ×1
r ×1