【发布时间】:2018-09-10 15:53:33
【问题描述】:
我在 d3.js 中编码,有时使用 input 元素来收集用户的输入,而不使用 form。这很好用。
但我注意到我无法在动态页面上始终如一地应用 autofocus 属性;它仅在第一次应用时有效。
下面是一个示例,其中包含所有编码。请注意autofocus 第一次出现input 元素时如何完美运行。即使编码相同,第二次也不行。
解决此问题将改善智能手机的用户体验。
注意:.focus() 方法不起作用,我认为这是因为它只能应用于表单中的input 元素。
h1,
p,
input {
font-family: sans-serif;
}
h1 {
font-size: 1rem;
}
input {
padding: 0.5rem;
border-radius: 1rem;
color: gray;
opacity: 0;
}
input::placeholder {
font-weight: normal;
color: silver;
}
input:focus {
outline: none;
}
<script src="https://d3js.org/d3.v4.min.js"></script>
<div id="container">
<h1>Testing the autofocus</h1>
</div>
<script>
// wait 2 seconds, then create input element with autofocus
d3.timeout(function() {
createFirstInput();
}, 2000);
function createFirstInput() {
d3.select("h1")
.text("Creating first input field")
d3.select("#container")
.append("input")
.attr("type", "text")
.attr("placeholder", "input goes here")
.attr("autofocus", "autofocus")
.transition()
.duration(2000)
.style("opacity", 1);
d3.select("#container")
.append("p")
.text("autofocus works; cursor appears in input field");
// delete input field after 5 seconds
d3.timeout(function() {
d3.select("h1")
.text("Creating second input field");
d3.selectAll("input, p")
.remove();
// create second input field
createSecondInput();
}, 5000);
}
function createSecondInput() {
// wait 2 seconds, then create input element with autofocus
d3.timeout(function() {
d3.select("#container")
.append("input")
.attr("type", "text")
.attr("placeholder", "input goes here")
.attr("autofocus", "autofocus")
.transition()
.duration(2000)
.style("opacity", 1);
d3.select("#container")
.append("p")
.text("autofocus doesn't work; no cursor in input field");
}, 2000);
}
</script>
【问题讨论】:
标签: javascript html forms d3.js focus