jquery 焦点在 ajax 加载的内容中不起作用

标签 jquery ajax angularjs

我试图将焦点集中在使用 ajax .load 方法生成的元素上。

DesignHome.aspx

<!-- All Jquery Scripts Go Here -->
<script src="../../Scripts/angular.min.js?v=7" type="text/javascript"></script>
<script type="text/javascript">
    var app = angular.module("module", []);
</script>
<script src="../../Scripts/DataFactory/DataFactory.js?v=7" type="text/javascript"></script>
<script src="../../Scripts/Controller/RegistrationController.js?v=7" type="text/javascript"></script>

<div id="divPopupRegistration" class="RegistrationPopup hide" style="overflow: hidden;
    z-index: 999" ng-app="module">  
    <div id="divFullRegistration" class="Full hide">
    </div>
</div>

<script type="text/javascript">
    function partialRegistrationForm() {
        $('#divFullRegistration').load('../RegistrationPages/PartialRegistration.htm', function (data) {
            $('input[name=firstname]').focus();
        });
    }
</script>

部分注册.htm

<!-- Again i have to load this, if i wont then it will not work. Reason unknown -->
<script type="text/javascript" src="../../Scripts/angular.min.js?v=7.0.0"></script>

<body ng-cloak>
    <div ng-controller="partialcontroller" id="parentDiv" ng-init="init()">
        <div class="registrationBg" runat="server" id="PartialRegistration">
            <div class="regcontent">
                <ul class="bxslider">
                    <li id="liContact">
                        <form name="formContactInfoPartial" novalidate>
                        <div class="popupContent" id="ContactInfo">
                            <div class="left column1">
                                <div class="lable">
                                    First Name<span>*</span></div>
                                <input type="text" class="textbox shareinput" ng-model="UserDetails.firstName" name="firstname"
                                    onkeypress="return isAlphabet(event);" ng-required="true" tabindex="0" maxlength="20"
                                    ng-class="{'has-error': submitted && formContactInfoPartial.firstname.$invalid}" />
                            </div>

<!-- Then all remaining markup and closing tags -->

<script>
    // My focus code breaks here !
</script>

我得到的错误

未捕获的范围错误:超出最大调用堆栈大小

我尝试作为替代方案

$('input[name="firstname"]').on("focus", function () { });

并且

setTimeout(function () { $('input[name="firstname"]').focus(); }, 500);

但这对我不起作用。

最佳答案

  • @Shaggy 为什么使用 Ajax 来获取模板?如果你 在不使用 Angular 的情况下手动注入(inject) HTML,您将面临循环的风险 正确设置 $apply$digest 并进行数据绑定(bind)。

    使用 AngularJS 你应该做的是:

    • 在需要时使用 ng-include 添加模板。(也可以使用 ng-transclude)

    • 创建属性指令来接收焦点

this example按下按钮时会添加模板

  <div id="divFullRegistration" ng-include="partialTemplate" class="Full hide"></div>

并在模板上添加 get-focus 指令

<input get-focus="true"/>

希望这对您有帮助。如果您想使用 ng-transcludedirectives 来完成此操作,请告诉我们。

问候

关于jquery 焦点在 ajax 加载的内容中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29283244/

相关文章:

javascript - Bootstrap addClass 在表单中不起作用

jquery - Ajax 质疑

javascript - stackedgroupedChart 中的 nvd3 双 X 轴

javascript - 根据下拉菜单中的值自动显示 Accordion 面板的数量

jquery - 可以在带有 css 类的 Jquery 表中选择

jQuery ajax 完成后调用执行函数

javascript - 使用 Ajax 制作添加监视列表按钮功能 (PHP)

c - 基于Ajax的进度条

javascript - 在单元事件测试 karma 中传递参数

javascript - 如何将我的 postgresDB 连接到 Ionic?