返回主屏幕后Textbox光标不闪烁问题求助
问题:返回主屏幕后Textarea光标无法闪烁
访问特定屏幕并返回主屏幕后,ID为txtExternalNotes的textarea光标无法正常闪烁。
相关代码
HTML代码
<div id="extrnalBar" ng-model="ExternalNoteDiv" ng-hide="HideExternalNote"> <span style="width:100px;" id="lblExternalNote">{{ExternalNoteText}}</span> <div style="padding-top:2px;"> <textarea id="txtExternalNotes" ng-model="ExternalNotes" ng-readonly="ExternalNotesReadonly" maxlength="2000" ng-minlength="0" ng-trim="false" class="k-textbox" tabindex="4" style="height:75px; width: 100%;"></textarea> <label> <span style="float:left;color:#a8a8a8;" id="lblENMaxCharacters"> {{Labels.EN_MaxCharacters}}</span> <span class="{{spnLength}}"><label id="lblENTextLength">{{Labels.EN_TextLength}}</label> {{ExternalNotes.length}}</span> </label> </div> </div>
当前使用的聚焦代码
SetFocus('txtExternalNotes', 1000, 1);
已尝试但无效的代码
$(document).ready(function () { $('textbox').focus(); });
解决方案
1. 修正jQuery选择器错误
你之前的尝试中选择器有误,textarea标签的正确选择器是$('#txtExternalNotes')或$('textarea'),而非$('textbox')(不存在该标签)。
2. 结合Angular生命周期触发聚焦
由于是Angular环境,$(document).ready仅在页面初始加载时执行,返回主屏幕时不会触发。可在主屏幕控制器中监听视图加载完成事件,确保元素渲染后再聚焦:
angular.module('你的模块名').controller('主屏幕控制器', function($scope, $timeout) { $scope.$on('$viewContentLoaded', function() { // 确保元素处于显示状态 if (!$scope.HideExternalNote) { $timeout(function() { // 普通原生聚焦 $('#txtExternalNotes').focus(); // 若使用Kendo UI,可调用组件自身的focus方法 // $('#txtExternalNotes').data('kendoTextBox').focus(); }, 0); } }); });
3. 确保元素可见后再执行聚焦
ng-hide="HideExternalNote"控制元素显示隐藏,必须确认HideExternalNote为false时再调用聚焦,否则元素不可见时聚焦操作无效。
4. 优化SetFocus函数逻辑
检查你的SetFocus函数,确保它能在元素可见、非只读状态下执行聚焦,必要时增加重试逻辑:
function SetFocus(elementId, delay, retryCount) { $timeout(function() { var element = $('#' + elementId); if (element.is(':visible') && !element.attr('readonly')) { element.focus(); } else if (retryCount > 0) { SetFocus(elementId, delay, retryCount - 1); } }, delay); }
内容的提问来源于stack exchange,提问作者Arundhati devkate
相关产品推荐
相关产品推荐

