-1

请找到以下代码:

setTimeout(function() {
var objTextareaText = objTextArea.innerText;
var normalizedText = objTextareaText;
                        if (!countSpacesAsChars) {
                            normalizedText = objTextareaText.replace(/\s/g,"").replace(/ /g, "");}
                        strText = normalizedText.replace(/(\r\n|\n|\r)/gm,    "").replace(/ /gi, " ");         
                        //Strip Html tags
                        strText = normalizedText.replace(/(<([^>]+)>)/ig,"").replace(/^([\t\r\n]*)$/, "");
                    }, 50);
if (strText.length >= MaxLength) {

}

从上面的 if 语句 strText 返回未定义。

此外,如果我在 settimeout 函数中包含 if 语句,如下所示:

setTimeout(function() {
    var objTextareaText = objTextArea.innerText;
                var normalizedText = objTextareaText;
                if (!countSpacesAsChars) {
                    normalizedText = objTextareaText.replace(/\s/g,    "").replace(/&nbsp;/g, "");
                }
                strText = normalizedText.replace(/(\r\n|\n|\r)/gm, "").replace(/&nbsp;/gi, " ");         
                //Strip Html tags
                strText =         normalizedText.replace(/(<([^>]+)>)/ig,"").replace(/^([\t\r\n]*)$/, "");

                if ((e.data.domEvent.$.keyCode === 8) ||     (e.data.domEvent.$.keyCode === 46) || ((e.data.domEvent.$.shiftKey) 
                    && (e.data.domEvent.$.keyCode === 36)) || ((e.data.domEvent.$.shiftKey) && (e.data.domEvent.$.keyCode === 35)) 
                    || (e.data.domEvent.$.keyCode === 35) || (e.data.domEvent.$.keyCode === 36) || (e.data.domEvent.$.keyCode === 37) 
                    || (e.data.domEvent.$.keyCode === 38) || (e.data.domEvent.$.keyCode === 39) || (e.data.domEvent.$.keyCode === 40)) {
                    showCharacterCount();
                    e.cancelBubble = false;
                    e.returnValue = true;
                    return true;
                }
                // Reaches Max Length - Shows error MAX_VALUE Reached Error Msg.
                if (strText.length >= MaxLength) {
                    showCharacterCount();
                    e.cancelBubble = true;
                    e.returnValue = false;
                    e.cancel();
                    e.stop();
                    return false;
                } else {
                    showCharacterCount(strText);
                    e.cancelBubble = false;
                    e.returnValue = true;
                    return true;
                }
          }, 50);

通过上述方式,关键事件存在问题。

e.cancelBubble = true;
e.returnValue = false;
                    e.cancel();
                    e.stop();
                    return false;

这些代码将不起作用。

所以请提出一个解决方案。请注意:当我从 salesforce 中的 RTF 获取字符数时,应该使用 Settimeout 函数。

4

1 回答 1

1

使用下面的代码,因为有 Closure 添加到 setTimeout

setTimeout(function() {

var objTextareaText = objTextArea.innerText;
var normalizedText = objTextareaText;
                        if (!countSpacesAsChars) {
                            normalizedText = objTextareaText.replace(/\s/g,"").replace(/&nbsp;/g, "");}
                        strText = normalizedText.replace(/(\r\n|\n|\r)/gm,    "").replace(/&nbsp;/gi, " ");         
                        //Strip Html tags
                        strText = normalizedText.replace(/(<([^>]+)>)/ig,"").replace(/^([\t\r\n]*)$/, "");



//change below code line as closure
  }(), 50);


// now strText is not undefined 
if (strText.length >= MaxLength) {

 }

如果你想在它之外使用 setTimeout 变量值,那么可以使用闭包函数,因为它(闭包函数)可以访问函数的外部、内部和内部。闭包函数的更多信息

于 2017-03-28T11:33:57.223 回答