首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jQuery找不到动态元素

jQuery找不到动态元素
EN

Stack Overflow用户
提问于 2015-11-09 11:01:53
回答 1查看 96关注 0票数 1

我让jQuery处理我的许多其他动态元素,包括来自同一部分的元素,但我似乎无法使用下面所示的名称或id来访问这些元素。

为了尝试访问元素,我已经经历了许多jQuery选择器,但是在这个实例中没有一个在工作,我不知道为什么。

我尝试过[name=$'value'][name~='value']和下面代码中所示的元素(在其他代码中也以类似的身份工作)和[name*='value'],但是没有人找到这些元素。

造成这种情况的原因/我应该或不应该做什么?

小提琴

代码在下面

将cshtml呈现为HTML标记:

代码语言:javascript
复制
<div class="ui-grid-c ui-responsive">
    <div class="ui-block-a">
        <p class="lblStyle">Size(CIDR) *</p>
    </div>
</div>
<div id="editorRowsRIpM">
    <div class="editorRow">
        <input type="hidden" name="pa_ipv4s[d23c87dc-56e0-4a5b-ab53-2631deb2094d].requestedIps.index" autocomplete="off" value="ff43c12e-d79d-4554-9a4b-b2152946dcdc" />
        <div class="ui-grid-c ui-responsive">
            <div class="ui-block-a"> <span>
                    <input data-val="true" data-val-required="Allocation type required." id="pa_ipv4s_d23c87dc-56e0-4a5b-ab53-2631deb2094d__requestedIps_ff43c12e-d79d-4554-9a4b-b2152946dcdc__requestedIpType" name="pa_ipv4s[d23c87dc-56e0-4a5b-ab53-2631deb2094d].requestedIps[ff43c12e-d79d-4554-9a4b-b2152946dcdc].requestedIpType" type="hidden" value="Requested" />
                    <input class="checkforcontent" data-val="true" data-val-number="The field requestedIpCidr must be a number." data-val-regex="The field requestedIpCidr must match the regular expression &#39;^[0-9]*$&#39;." data-val-regex-pattern="^[0-9]*$" data-val-required="CIDR required." id="pa_ipv4s_d23c87dc-56e0-4a5b-ab53-2631deb2094d__requestedIps_ff43c12e-d79d-4554-9a4b-b2152946dcdc__requestedIpCidr" name="pa_ipv4s[d23c87dc-56e0-4a5b-ab53-2631deb2094d].requestedIps[ff43c12e-d79d-4554-9a4b-b2152946dcdc].requestedIpCidr" type="text" value="" />
                </span>

            </div>
            <div class="ui-block-b">
                <p class="lblStyle">Mask *</p>
            </div>
            <div class="ui-block-b"> <span>
                    <input class="checkforcontent" data-val="true" data-val-length="The field requestedIpMask must be a string with a maximum length of 16." data-val-length-max="16" data-val-regex="The field requestedIpMask must match the regular expression &#39;\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b&#39;." data-val-regex-pattern="\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b" data-val-required="Mask required." id="pa_ipv4s_d23c87dc-56e0-4a5b-ab53-2631deb2094d__requestedIps_ff43c12e-d79d-4554-9a4b-b2152946dcdc__requestedIpMask" name="pa_ipv4s[d23c87dc-56e0-4a5b-ab53-2631deb2094d].requestedIps[ff43c12e-d79d-4554-9a4b-b2152946dcdc].requestedIpMask" type="text" value="" />
                    </span>
</span>
            </div>
        </div>
    </div>
</div>

JQuery与外卡选择器:

代码语言:javascript
复制
function pad(n, width, z) {
    z = z || '0';
    n = n + '';
    return n.length >= width ? n : new Array(width - n.length + 1).join(z) + n;
}

$("input[name*='requestedIpCidr']").change(function () {
    var prefix = $(this).val();
    var zeros = pad(0, 32 - prefix, 0);
    if (32 - prefix == 0) zeros = '';
    var full = pad(zeros, 32, 1);
    var octets1 = full.substring(0, 8);
    var octets2 = full.substring(8, 16);
    var octets3 = full.substring(16, 24);
    var octets4 = full.substring(24, 32);
    var o1 = parseInt(octets1, 2).toString(10);
    var o2 = parseInt(octets2, 2).toString(10);
    var o3 = parseInt(octets3, 2).toString(10);
    var o4 = parseInt(octets4, 2).toString(10);
    $(this).nextAll("input[name*='requestedIpMask']").first().val(o1 + '.' + o2 + '.' + o3 + '.' + o4);
});
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-09 11:05:34

由于nextAll()获得了以下所有的同级和元素,所以input[name*='requestedIpMask']不是同级元素,因此它无法找到元素。

您可以使用.closest()遍历,然后使用.find()

代码语言:javascript
复制
$(this).closest('.ui-grid-c').find("input[name*='requestedIpMask']")

而不是

代码语言:javascript
复制
$(this).nextAll("input[name*='requestedIpMask']")

更新Fiddle

因为您是动态地创建元素,所以使用事件委托委托-events方法。

一般语法

代码语言:javascript
复制
$(document).on('event','selector',callback_function)

示例

代码语言:javascript
复制
$(parentStaticContainer).on('click', "input[name*='requestedIpCidr']", function(){
    //Your code
});
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33607699

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档