【问题标题】:jQuery - Attach to Element DynamicallyjQuery - 动态附加到元素
【发布时间】:2013-08-10 22:19:45
【问题描述】:

我需要将一些代码附加到我的所有 textarea 元素中,这在运行时可以正常工作

$(document).ready(function() {
     $('textarea').textareaCount(options);
});

但是我通过 Ajax 和模板加载了 textarea 元素,因此在文档准备好后加载的任何 textarea 元素都不会包含在 jQuery 选择中,并且会丢失我正在添加的行为。

处理这个问题的最佳方法是什么?

【问题讨论】:

    标签: jquery ajax templates


    【解决方案1】:

    我建议在 textarea 集中时添加它:

    $(document).on( 'focus', 'textarea', function( ) {
        if( !$(this).data( 'hasSetup' ) ) {
            $(this).data('hasSetup',true).textareaCount(options);
        }
    } );
    

    .on 的这种形式意味着它将发生在与选择器 (textarea) 匹配的 document 的所有子元素上。这意味着它适用于所有当前和未来的元素。因此,每次聚焦 textarea 时,代码都会运行。因为我们实际上只希望它在每个 textarea 中运行一次,所以我使用了一个变量来检查计数器是否已经添加到当前的 textarea 中。使用.one 不是一个选项,因为它只适用于 first 文本区域。

    【讨论】:

    • 这正在按预期对我的所有 textarea 元素起作用,但它在第一个元素之后反复添加更多内容,因此存储 hasdata 值 true 似乎有问题。
    • 嗯,也许textareaCount 没有链接。在这种情况下,请尝试将行改为$(this).data('hasSetup',true).textareaCount(options)
    • Bingo,让它完美运行。我想我可能需要一段时间才能弄清楚原因:)
    • @Jammer 这可能会对您有所帮助:stackoverflow.com/q/7475336/1180785(链接取决于插件制造商所做的特定事情。我猜这个插件制造商没有这样做)
    【解决方案2】:

    实际上你需要在你的 ajax 准备好文档后再次调用textareaCount(options)

    例如

    当你点击一个按钮时你想计算文本区域:

    $("#button").off('click').on('click', function() {
         $('textarea').textareaCount(options);
    });
    

    或者这个对于早期的 jquery 版本

    $("#button").die('click').live('click', function() {
         $('textarea').textareaCount(options);
    });
    

    【讨论】:

    【解决方案3】:

    准备好的内部

    $(document).ready(function() {
    

    当您最初将代码附加到 textareas 时,给它们一个类以将它们标识为已经附加了代码。

    $('textarea').textareaCount(options);
    $('textarea').addClass('alreadyHasCount');
    

    然后,向将插入 textareas 的父级添加一个 dom 元素侦听器。让听众寻找任何不属于“alreadyHasCount”类的文本区域,附上代码,然后给他们“alreadyHasCount”类

    $("#textAreaParent").bind("DOMNodeInserted DOMSubtreeModified",function(){
        $('textarea:not(.alreadyHasCount)').textareaCount(options);
        $('textarea:not(.alreadyHasCount)').addClass('alreadyHasCount');
    });
    
    });
    

    【讨论】:

    • 这适用于静态文本区域元素,但不适用于动态加载的元素。我已根据我的父母将 id 更改为 #parent,但它仍然无法正常工作。
    • 嗯。好吧,首先,请查看我的编辑,我在其中添加了 DOMSubtreeModified 事件,看看是否有帮助。 2,我不知道 textareaCount 函数是什么,我做了一个示例,我只是用简单的样式属性更改替换它,它适用于 chrome 和 FF。 3. 我认为 IE 会蜷缩成胎儿的姿势并吸吮它的拇指。
    • 也可以检查变量选项的范围以确保它在绑定事件中可用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-10
    • 1970-01-01
    • 2012-05-24
    • 1970-01-01
    • 2016-03-25
    • 2021-01-20
    • 1970-01-01
    相关资源
    最近更新 更多