js动态创建input元素并自动获取焦点

input元素不会自动获取焦点代码如下:

 <div>
    <h2>js创建input元素并自动聚焦</h2>
 </div>
 <script>
let myButton = document.createElement('button');
myButton.innerText = ' 点击我';
document.body.append(myButton);
myButton.onmousedown = () => {
  let myInput = document.createElement('input');
  myInput.placeholder = '手机号';
  document.body.appendChild(myInput);
  myInput.focus();
};	
</script>

点击按钮后,生成的input框并不会获取焦点,如图:
在这里插入图片描述

解决方案

1、使用setTimeout,代码如下
<div>
    <h2>js创建input元素并自动聚焦</h2>
 </div>
 <script>
let myButton = document.createElement('button');
myButton.innerText = ' 点击我';
document.body.append(myButton);
myButton.onmousedown = () => {
  let myInput = document.createElement('input');
  myInput.placeholder = '手机号';
  document.body.appendChild(myInput);
  setTimeout(() => {
    myInput.focus();
  }, 0);
};	
</script>
2、把onmousedown改成onclick,代码如下:
<div>
    <h2>js创建input元素并自动聚焦</h2>
 </div>
 <script>
let myButton = document.createElement('button');
myButton.innerText = ' 点击我';
document.body.append(myButton);
myButton.onclick = () => {
  let myInput = document.createElement('input');
  myInput.placeholder = '手机号';
  document.body.appendChild(myInput);
  myInput.focus();
};	

当使用onmousedown时,默认触发的Event:foucs事件是发生在完成onmousedown回调函数之后,故input框无法获取焦点
当使用onclick时,默认触发的Event:foucs事件是发生在完成onclick回调函数之前,故input框可以获取焦点
过程如下图:

onmousedown过程图

在这里插入图片描述

onclick过程图

在这里插入图片描述
验证触发默认事件代码如下:

<div>
    <h2>js创建input元素并自动聚焦</h2>
 </div>
 <script>
let myButton = document.createElement('button');
myButton.innerText = ' 点击我';
document.body.append(myButton);
// 默认触发该事件
myButton.onfocus = () => {
  console.log('触发了onfocus事件');
};
myButton.onmousedown = () => {
  let myInput = document.createElement('input');
  myInput.placeholder = '手机号';
  document.body.appendChild(myInput);
  myInput.focus();
};

打印的log如图:
在这里插入图片描述

3、阻止默认事件发生,代码如下:

只需要阻止Event:foucs事件的发生,就可以自动获取焦点。

<div>
    <h2>js创建input元素并自动聚焦</h2>
 </div>
 <script>
let myButton = document.createElement('button');
myButton.innerText = ' 点击我';
document.body.append(myButton);
myButton.onmousedown = event => {
  event.preventDefault();
  let myInput = document.createElement('input');
  myInput.placeholder = '手机号';
  document.body.appendChild(myInput);
  myInput.focus();
};

使用上述任意一种解决方案,点击按钮后都可以获取焦点,效果图如下:
在这里插入图片描述

ps: 如有不足,请指点,谢谢!

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要通过JavaScript激活input焦点,可以使用以下几种方法。 方法一:使用jQuery的focus()方法 可以使用jQuery的focus()方法来激活input焦点。例如,可以使用下面的代码将焦点设置在id为"myInput"的input元素上: ``` $("#myInput").focus(); ``` 这样,当页面加载时,输入框将自动获得焦点。 方法二:使用原生JavaScript的focus()方法 可以使用原生JavaScript的focus()方法来激活input焦点。例如,可以使用下面的代码将焦点设置在id为"myInput"的input元素上: ``` document.getElementById("myInput").focus(); ``` 这样,当页面加载时,输入框将自动获得焦点。 方法三:触发事件来激活焦点 可以通过触发事件来激活input焦点。例如,可以使用下面的代码来模拟用户点击按钮,然后自动创建一个input元素并将焦点设置在它上面: ``` let myButton = document.createElement('button'); myButton.innerText = '点击我'; document.body.appendChild(myButton); myButton.onmousedown = () => { let myInput = document.createElement('input'); myInput.placeholder = '手机号'; document.body.appendChild(myInput); myInput.focus(); }; ``` 这样,当用户点击按钮时,将自动创建一个带有placeholder为"手机号"的输入框,并将焦点设置在它上面。 需要注意的是,有时候浏览器会阻止自动获取焦点的行为,为了解决这个问题,可以使用preventDefault()方法来阻止事件的默认行为。例如: ``` let myButton = document.createElement('button'); myButton.innerText = '点击我'; document.body.appendChild(myButton); myButton.onmousedown = event => { event.preventDefault(); let myInput = document.createElement('input'); myInput.placeholder = '手机号'; document.body.appendChild(myInput); myInput.focus(); }; ``` 这样,即使浏览器会阻止自动获取焦点,上面的代码也可以成功地激活input焦点。 综上所述,要通过JavaScript激活input焦点,可以使用jQuery的focus()方法、原生JavaScript的focus()方法,或者通过触发事件来实现。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [input js获取焦点](https://blog.csdn.net/weixin_36508680/article/details/62038089)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [js动态创建input元素自动获取焦点](https://blog.csdn.net/cobek/article/details/122914269)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值