请找到以下代码:
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返回为undefined。
此外,如果我在settimeout函数中包含if语句,如下所示:
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]*)$/, "");
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;
这些代码不起作用。
所以请建议一个解决方案。 请注意:应该使用Settimeout函数,因为我在salesforce中获得了RTF中字符的数量。
答案 0 :(得分:1)
使用下面的代码,因为Closure已添加到setTimeout
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]*)$/, "");
//change below code line as closure
}(), 50);
// now strText is not undefined
if (strText.length >= MaxLength) {
}
如果要在其外部使用setTimeout变量值,则可以使用闭包函数,因为它(一个闭包函数)可以访问外部,内部和内部函数。更多信息,请访问closure function