无法输入下一个输入字段 - jQuery

Posted

技术标签:

【中文标题】无法输入下一个输入字段 - jQuery【英文标题】:Not able to enter next input field - jQuery 【发布时间】:2017-09-07 20:17:37 【问题描述】:

我无法输入下一个输入字段,即在逗号输入上创建文本的第一个字段,它似乎工作正常,但 focus 不工作

这里是代码

    在第一个字段中输入内容,点击逗号 尝试移至下一个输入字段,焦点不起作用

$('#tags input').on('focusout', function() 
	var txt = this.value.replace(/[^a-zA-Z0-9\+\-\.\#]/g, ''); // allowed characters list
	if (txt) $(this).before('<span class="tag">' + txt + '</span>');
	this.value = "";
	this.focus();
).on('keyup', function(e) 
	if (/(188|13)/.test(e.which)) $(this).focusout();
	event.preventDefault(e);
);
.form-groupfloat:left; width:100%; margin-bottom:15px;
.form-group > inputpadding:6px 12px; width:100%;
.tagbackground:#ccc; padding:2px 4px; display:inline-block; margin-right:5px; margin-bottom:5px;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div class="form-group" id="tags" >
  <label for="submittedby">Add CC</label>
  <input type="text" class="form-control" value="" placeholder="Add Email Address">
</div>
<div class="form-group" >
  <label for="submittedby">Other</label>
  <input type="text" class="form-control" value="" placeholder="Add Email Address">
</div>

【问题讨论】:

因为你在focusout事件上做focus(),导致重新关注同一个元素 【参考方案1】:

您需要在下一个输入字段中调用.focus(),而不是this。我是这样得到的:document.getElementsByTagName('input')[1],但你可以用任何你喜欢的方式得到它。这是工作的 sn-p:

$('#tags input').on('focusout', function() 
	var txt = this.value.replace(/[^a-zA-Z0-9\+\-\.\#]/g, ''); // allowed characters list
	if (txt) $(this).before('<span class="tag">' + txt + '</span>');
	this.value = "";
  var nextInput = document.getElementsByTagName('input')[1]
	nextInput.focus();
).on('keyup', function(e) 
	if (/(188|13)/.test(e.which)) $(this).focusout();
	event.preventDefault(e);
);
.form-groupfloat:left; width:100%; margin-bottom:15px;
.form-group > inputpadding:6px 12px; width:100%;
.tagbackground:#ccc; padding:2px 4px; display:inline-block; margin-right:5px; margin-bottom:5px;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div class="form-group" id="tags" >
  <label for="submittedby">Add CC</label>
  <input type="text" class="form-control" value="" placeholder="Add Email Address">
</div>
<div class="form-group" >
  <label for="submittedby">Other</label>
  <input type="text" class="form-control" value="" placeholder="Add Email Address">
</div>

【讨论】:

只是想知道为什么this 不起作用,根据您的建议,我想我可以使用 `var nextInput = $(".form-control > input"); nextInput.focus();`这个好用吗? 不完全是。例如,您可以使用var nextInput = $('.form-control')[1]。您有 2 个带有 form-control 类的输入,当您编写 $('.form-control') 时,它将选择具有此类类的 ALL 元素。所以接下来你只需要选择特定的元素(我们有2个元素,我们要选择第二个),只需在后面加上[1],它就会选择第二个输入【参考方案2】:

只需从focusout 事件中删除focus() 调用,它就会按照你的预期工作,它基本上会导致重新聚焦,你将永远无法聚焦。

$('#tags input').on('focusout', function() 
	var txt = this.value.replace(/[^a-zA-Z0-9\+\-\.\#]/g, ''); // allowed characters list
	if (txt) $(this).before('<span class="tag">' + txt + '</span>');
	this.value = "";
	//this.focus(); simply remove this
).on('keyup', function(e) 
	if (/(188|13)/.test(e.which)) $(this).focusout();
	event.preventDefault(e);
);
.form-groupfloat:left; width:100%; margin-bottom:15px;
.form-group > inputpadding:6px 12px; width:100%;
.tagbackground:#ccc; padding:2px 4px; display:inline-block; margin-right:5px; margin-bottom:5px;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div class="form-group" id="tags" >
  <label for="submittedby">Add CC</label>
  <input type="text" class="form-control" value="" placeholder="Add Email Address">
</div>
<div class="form-group" >
  <label for="submittedby">Other</label>
  <input type="text" class="form-control" value="" placeholder="Add Email Address">
</div>

【讨论】:

看来你的sn-p不能正常工作,输入分号后第二个输入没有聚焦 嗯,这是一个设计泄漏,它应该在手动调用focusout() 之后从keyup 事件处理(接下来关注)。而不是里面的焦点。我没有创建 sn-p,只是从问题中复制并纠正了错误的地方

以上是关于无法输入下一个输入字段 - jQuery的主要内容,如果未能解决你的问题,请参考以下文章

TinyMCE 4 无法输入提供的插件文本字段

jquery ui datepicker无法添加新的输入字段

jquery 想要获取 DOM 中的下一个输入元素

无法在弹出式灯箱上输入文本字段

无法使用 jQuery 传递焦点下一个输入

输入空时jQuery文本输入实时验证清除错误[重复]