如何将简单的jQuery代码转换为以下代码的wordpress jQuery

时间:2017-04-13 08:00:39

标签: jquery wordpress

    <b id="smsCount"></b> SMS (<b id="smsLength"></b>) Characters left
    <br /><textarea id="smsText" style="width:400px;height:200px">
    </textarea>


    //Plugin
    (function($){
      jQuery.fn.smsArea = function(options){

var
e = this,
cutStrLength = 0,

s = jQuery.extend({

    cut: true,
    maxSmsNum: 3,
    interval: 400,

    counters: {
        message: jQuery('#smsCount'),
        character: jQuery('#smsLength')
    },

    lengths: {
        ascii: [160, 306, 459],
        unicode: [70, 134, 201]
    }
    }, options);


e.keyup(function(){

    clearTimeout(this.timeout);
    this.timeout = setTimeout(function(){

        var
        smsType,
        smsLength = 0,
        smsCount = -1,
        charsLeft = 0,
        text = e.val(),
        isUnicode = false;

        for(var charPos = 0; charPos < text.length; charPos++){
            switch(text[charPos]){
                case "\n": 
                case "[":
                case "]":
                case "\\":
                case "^":
                case "{":
                case "}":
                case "|":
                case "€":
                    smsLength += 2;
                break;

                default:
                    smsLength += 1;
            }

            //!isUnicode && text.charCodeAt(charPos) > 127 && text[charPos] != "€" && (isUnicode = true)
            if(text.charCodeAt(charPos) > 127 && text[charPos] != "€")
            isUnicode = true;
        }

        if(isUnicode)   smsType = s.lengths.unicode;
        else                smsType = s.lengths.ascii;

        for(var sCount = 0; sCount < s.maxSmsNum; sCount++){

            cutStrLength = smsType[sCount];
            if(smsLength <= smsType[sCount]){

                smsCount = sCount + 1;
                charsLeft = smsType[sCount] - smsLength;
                break
            }
        }

        if(s.cut) e.val(text.substring(0, cutStrLength));
        smsCount == -1 && (smsCount = s.maxSmsNum, charsLeft = 0);

        s.counters.message.html(smsCount);
        s.counters.character.html(charsLeft);

    }, s.interval)
}).keyup()
    }}(jQuery));


    //Start
    jQuery(function(){
     jQuery('#smsText').smsArea({maxSmsNum:3});
    });

我正在使用Wordpress,M将制作一些计算ASCII和Unicode字符的smscount系统。我看到Wordpress采用jQuery而不是$。但它没有用。 Dnt知道我犯了错误吗?

感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

改变......

jQuery(function(){
 jQuery('#smsText').smsArea({maxSmsNum:3});
});

......进入......

(function($){
  $(document).on('ready', function(){
    $('#smsText').smsArea({maxSmsNum:e})
  })
})(jQuery);

如果DOM中存在id="smsText"的元素,并且在运行上面的那个时,定义smsArea()函数的脚本已准备好/已加载,则可以删除document.ready包装器(删除行24 - 不删除3!)。

但是,上面语法中的关键不是document.ready包装器,而是围绕它的那个。 &#34; jQuery包装器&#34; 。您需要创建一个闭包并传递jQuery作为参考。这是WordPress&#34; 的标准&#34; jQuery包装器,因为在极少数情况下WP需要在同一页面上运行不同版本的jQuery(取决于您加载的插件/主题) )。

如果你看看你上面的功能,它就会以同样的方式包裹起来。

此处more detailed explanation