jQuery:使用 var 快捷方式分配数据以及如何链接功能以在加载和单击时运行

jQuery: use var shortcut to assign data and how to chain function to run on load and click

本文关键字:功能 链接 加载 运行 单击 何链接 快捷方式 var 使用 分配 数据      更新时间:2023-09-26

我有一个由两部分组成的问题。

一:我可以使用我设置的last变量来更新if (!last) {后行的值last = size;吗?

    var j$ = jQuery.noConflict();
    function updateCount() {
        var self = j$(this),
            last = self.data('last'),
            size = self.val().length,
            span = j$('.currentCount');
        if (!last) {
            self.data('last', size);
        } else if (last != size) {
            span.text(size);
            self.data('last', size);
        }
    }
    j$('textarea[id$=textBody]').on('propertychange change click keyup input paste', updateCount);

其次,我可以链接我的.on('propertychange ...行以使脚本加载后立即运行updateCount吗?

问题 1:

不,你不能简单地使用变量的赋值,因为jQuery中没有数据绑定。因此last更新变量永远不会更新 jQuery 对象的data-last

问题2:

这是我习惯做的事情:

j$('textarea[id$=textBody]').on('propertychange change ...', updateCount).change();

其中change()自动触发函数。

对于问题 1:不,你不能。如果您希望数据绑定工作,您可以尝试 AngularJS,其中 UI 和模型之间的 2 路数据绑定是可能的。

Q2:我的解决方案是这样的使用即时函数

 $('textarea[id$=textBody]').on('propertychange change click keyup input paste', (function(){
    updateCount();
    return updateCount;
    }()));

last 变量在 self.data('last') 中有一个值的副本,它不是一个指针,所以你必须做这样的事情:

last = size;
self.data('last', last);

对于第二个问题,您可以触发事件或仅调用函数:

j$('textarea[id$=textBody]').trigger('propertychange');
// or
j$('textarea[id$=textBody]').each(updateCount);