我有一个包含一些输入字段的表单。我正在使用tabStrip KendoUI小部件来对输入字段进行分组。我正在使用Kendo验证器,并且在提交表单时会触发一些错误消息。问题是如果带有错误消息的输入字段位于不同的选项卡上,则当前选择的用户无法看到它。我想要完成的是当表单被验证时,包含第一个输入字段的选项卡包含要选择的错误消息,焦点位于该输入字段上。以下是一些示例代码:
<script type="text/javascript">
$("#tabStrip").kendoTabStrip();
</script>
<div id="tabStrip">
<ul>
<li class="k-state-active">Master Info</li>
<li>Developer Info</li>
</ul>
<div id="tabStrip-1">
<div>
<label for="folderName" class="required">Folder Name:</label>
<input type="text" id="folderName" name="folderName" required />
<span class="k-invalid-msg" data-for="folderName"></span>
</div>
<div>
<label for="afk">Afk:</label>
<input type="text" id="afk" name="afk" data-bind = "value: Afk" />
</div>
</div>
<div id="tabStrip-2">
<div>
<label for="updateFolder" class="required">Update Folder:</label>
<input type="text" id="Text1" name="updateFolder" class="k-input k-invalid" required />
<span class="k-invalid-msg" data-for="updateFolder"></span>
</div>
<div>
<label for="age">Age:</label>
<input type="text" id="age" name="age" class="k-input k-invalid" data-bind = "value: Age" />
</div>
</div>
</div>
提交后,表单验证被触发,我发现第一个包含输入错误消息的选项卡。但是将焦点设置在带有错误消息的第一个元素上不起作用。我怀疑在提交后还没有加载input元素。这是js代码:
if (!omega.validatable.validate()) {
//Select all the tab strips
tabs = $("#tabStrip").find('div[id^=tabStrip]');
var tabStrip = $("#tabStrip").data("kendoTabStrip");
//Loop through the tab strips looking for an input containing the error class
for (var i = 0; i < tabs.length; i += 1) {
if ($(tabs[i]).find('input[class~=k-invalid]').length > 0) {
tabStrip.select(i);
// Set focus on the first input element with error message
$('input.k-input.k-invalid:first').focus();
break;
}
}
return false;
}
使用
$(document).ready(function () {
$('input.k-input.k-invalid:first').focus();
});
在这一点上也没有帮助。请帮忙。谢谢!
答案 0 :(得分:0)
这应该听取发生的任何提交
$(body).on('submit',null,function() {
$('input.k-input.k-invalid:first').focus();
});
或更具体的用途。
$('#yourForm').submit(function() {
$('input.k-input.k-invalid:first').focus();
});
还将输入包装在<form></form>
或提交不会触发。
<强>更新强>
由于您的表单分散在不同的选项卡中,因此您需要将整个表单包装在表单标记中。
<form id="yourForm" action="submit.php"> //I will discuss action below
<div id="tabStrip">
<ul>
<li class="k-state-active">Master Info</li>
<li>Developer Info</li>
</ul>
<div id="tabStrip-1">
<div>
<label for="folderName" class="required">Folder Name:</label>
<input type="text" id="folderName" name="folderName" required />
<span class="k-invalid-msg" data-for="folderName"></span>
</div>
<div>
<label for="afk">Afk:</label>
<input type="text" id="afk" name="afk" data-bind = "value: Afk" />
</div>
</div>
<div id="tabStrip-2">
<div>
<label for="updateFolder" class="required">Update Folder:</label>
<input type="text" id="Text1" name="updateFolder" class="k-input k-invalid" required />
<span class="k-invalid-msg" data-for="updateFolder"></span>
</div>
<div>
<label for="age">Age:</label>
<input type="text" id="age" name="age" class="k-input k-invalid" data-bind = "value: Age" />
</div>
</div>
</div>
</form>
这会对按下的表单按钮做出反应,并确保文本框中的数据也保持不变。
如果这个静态帖子(即你的php会返回一个新的页面然后需要action属性,你也可以把它变成一个ajax帖子,这意味着你neva离开页面例如。
$('#yourForm').submit(function() {
$.post('submit.php',$(this).serialize(),function() {
$('input.k-input.k-invalid:first').focus();
});
e.preventDefault(); // stop it from executing the action
});
现在它将正常发布表单并在返回时将焦点设置在输入上...但是由于它们位于不同的选项卡中,您可能还需要切换回文本框选项卡。
答案 1 :(得分:0)
也许你需要首先解开其他元素,如:
$("input").blur(`);
比
$('input.k-input.k-invalid:first').focus();
答案 2 :(得分:0)
试试这个
function pageload()
{ $( '#控件名称')专注()。 }
答案 3 :(得分:0)
实际上有一个非常简单的聚焦解决方案。 转到输入元素并输入“自动对焦”。就是这样。
<input type="text" id="folderName" name="folderName" autofocus required>