这个函数本质上应该做的是从输入文本中获取单词列表,并从下拉菜单中以客户端选择的间隔(WPM)将其设置在显示器上。
如果函数中传递的单词包含问号,句号,冒号,分号,感叹号或逗号,则将其删除,并且所选的间隔加倍。例如,如果单词之间的延迟是117毫秒,那么它将是234毫秒。
我最难解决您确定传递的单词是否包含标点符号并将其删除的部分。
我收到错误: 未捕获的类型错误:无法读取属性' indexOf'未定义的。
我不确定为什么会发生这种情况,因为list[index++]
是String
而indexOf
是Javascript中的字符串方法,而不是属性。
我也不确定如何实施延迟。鉴于我已经以这种方式使用setInterval()
(我只能使用setInterval来实现此目的)我不确定如何设置String
显示两次,同时还包括延迟。
function runDisplay(data, id) {
var reader = document.getElementById(id);
var index = 0;
if (timer) {
clearInterval(timer);
}
if (data.length) {
timer = setInterval(function() {
var punctuation = [".", ",", ":", ";", "!", "?"];
var textSpeed = 117; // default
for (var j = 0; j < punctuation.length; j++) {
// remove punctuation if found and double text delay
// if multiple found, remove only one
if (!(data[index++].indexOf(punctuation[j]) === -1)) {
data[index++] = string.replace(punctuation[j], '');
// set data[index++] to display twice to double delay?
}
}
reader.innerHTML = data[index++];
index = index % data.length;
}, textSpeed);
}
}
答案 0 :(得分:1)
index++
每次调用时都会增加索引变量,并且在循环体中调用它两次。
在if (!(data[index++].indexOf(punctuation[j]) === -1)) {
索引中,我可以说{i}和data[index++] = string.replace(punctuation[j], '');
中的i + 1。
答案 1 :(得分:1)
我收到错误:未捕获类型错误:无法读取属性 &#39;的indexOf&#39;未定义的。
我不确定为什么会这样,因为list [index ++]是一个String和 indexOf是Javascript中的字符串方法,而不是属性。
首先,方法也是对象的属性。
其次,JS引擎告诉您,您正在indexOf
上调用undefined
,因此它不是字符串。并且data[index++]
未定义,因为index
可能不是data
数组范围内的索引。
该函数的主要问题是,如果data
是一个单词数组,则不要在其上正确迭代。您每次在阅读数组时都需要递增index
,index
每次显示时只应增加一次。
我也不确定如何实施延迟。鉴于我,我 以这种方式使用setInterval()(我只能使用setInterval 这个目的)我不确定如何设置字符串 显示两次,同时还包括延迟。
如果函数必须在无限循环中显示所有单词(这是index = index % data.length
的目的,对吧?),可以在传递给当前的匿名函数内调用clearInterval和另一个setInterval setInterval,允许计算你想要的textSpeed。
答案 2 :(得分:1)
代码很乱,但我希望你想要的......有点:
public function setEmaileAttribute($value) {
if ( empty($value) ) { // will check for empty string
$this->attributes['company'] = NULL;
} else {
$this->attributes['company'] = $value;
}
}
只需将其粘贴到Chrome控制台即可进行测试。