Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在jQuery中创建这个.live()_Jquery_Textarea_Live - Fatal编程技术网

如何在jQuery中创建这个.live()

如何在jQuery中创建这个.live(),jquery,textarea,live,Jquery,Textarea,Live,我正在使用名为charCount的jQuery插件为一些文本区域显示字符计数器,它工作得很好,但是当我在页面上添加新文本区域时,新文本区域没有计数器,我是新手,以下是我如何使用该插件: $'.message form'.charCount{ 容许人数:140, 警告:20 }; 更新解决方案: $(".message-form").live("click", function(){ if ($(this).data('hascharcount') == undefined) {

我正在使用名为charCount的jQuery插件为一些文本区域显示字符计数器,它工作得很好,但是当我在页面上添加新文本区域时,新文本区域没有计数器,我是新手,以下是我如何使用该插件:

$'.message form'.charCount{ 容许人数:140, 警告:20 };

更新解决方案:

$(".message-form").live("click", function(){
        if ($(this).data('hascharcount') == undefined) {
            $(this).data('hascharcount', true).charCount({ allowed: 140, warning: 20 });
        }
    });

听起来,在将每个文本区域动态添加到页面后,需要初始化它们的字符数。如果您只有上面这一行,它只会影响页面加载时页面上的文本区域。所以你可以这样做:

//add the textarea with an ID of 'newTextarea1'
//then use charCount on the new textarea
$('#newTextarea1').charCount({ allowed: 140, warning: 20 });

最简单的方法就是在创建的任何新元素上运行该方法

$('<textarea ...>').appendTo('#wherever').charCount({ allowed: 140, warning: 20 });
不能简单地在绑定事件时在上使用。与其编辑一个可能有作者在任何时候更新的插件,这意味着重新修改它,不如围绕它来写

因此,如果您不想在每次动态创建元素后调用.charCount,您可以这样做,即在用户实际使用该元素之前,在上下文中调用它

$(document).on('focus', '.message-form', function(){
    if (typeof $(this).data('hascharcount')=='undefined') {
        $(this).data('hascharcount', true).charCount({ allowed: 140, warning: 20 });
    }
})

N.B.很多人都认为。on是贬值的别名。活出它不是的样子。要将on用作live,即对于运行时不存在的元素,它需要一些已经存在的内容来锚定到,例如在其内部创建内容的父div,或者,如果您懒惰,则需要文档。

添加新的textarea时,查看您使用find添加的元素中的新元素,并仅对该元素调用plugin

假设您有某种行结构或textarea的包装器:

var newDiv=$('<div class="foo"><textarea class="message-form"></textarea></div>').appendTo('#content')

newDiv.find('.message-form').charCount({ allowed: 140, warning: 20 });
尝试将.on与focusin事件一起使用,同时以选择器的父容器为目标。消息形式如下:

。。。或者,您也可以将目标指向body标记或文档,如:

$("body").on("focusin", function(){
  $('.message-form').charCount({ allowed: 140, warning: 20 });
}); // on
。。。这将允许您将插件用于当前和未来的元素,而无需在每次添加新元素时重新初始化插件

我已经成功地将该方法用于其他不支持动态添加元素的插件,正如您在这里看到的

注意:.on需要jQuery v1.7+,否则。对于较低版本,建议使用委托

编辑:我希望在Character Count插件中找到回调,但它不存在……因此,为了避免计数器重复,我们可以通过以下方式调整代码:


有关活动,请参见

live。在添加新元素后立即调用该方法。@不推荐使用未定义的live。改为在事件中使用on。@JanDvorak是的,我。您没有在那里绑定任何内容,不能将该行用作实时事件。向我们展示charCount方法。@popla面,谢谢。我需要使用live,因为我有大约200个文本输入,甚至更多,每次添加新文本区域时初始化对我来说不是一个选项。谢谢。在您将此内容发布到与其他人已发布的答案相同的答案之前10分钟作出的响应。我需要使用live,因为我有大约200个文本输入,甚至更多,每次添加新文本区域时初始化不是我的选项me@popnoodles我不知道你在说什么他们,谢谢-它确实有用,但是如果我进入另一个文本区域,它会将值复制到所有其他文本区域,如果我首先进入textarea1,它将显示剩余的140个字符,然而,如果我在第二个文本区域输入鼠标,textarea1将获得140140个字符,有没有办法删除?@SpecialK。我不知道这个插件,但我会检查一下谢谢,我想可能是因为“focusin”事件,当鼠标在文本区域聚焦时,它会多次显示左边的字符,如果我去3次,它会显示140140。谢谢,通过为元素设置一个值并检查它是否已定义,我已经完成了基于IDEA的代码。
$("#parentContainer").on("focusin", function(){
  $('.message-form').charCount({ allowed: 140, warning: 20 });
}); // on
$("body").on("focusin", function(){
  $('.message-form').charCount({ allowed: 140, warning: 20 });
}); // on
$("#myForm").on("focusin", '.message-form', function() {
    $(this).next("span.counter").remove();
    $(this).charCount({
        allowed: 140,
        warning: 20
    });
}); // on