.on('keyup')计算特定单词或短语的.indexof
.on('keyup') calculate the .indexOf a certain word or phrase
我有一个文本区,当某个单词或短语被输入时,keyup调用一个函数,但也调用另一个函数,如果单词或短语被删除,则撤消初始函数。
var phraseList = [
"foo foo",
"foobar",
"foobity foofoo foo"
];
$("#id_message").on('keyup', function(){
for(var i=0;i<phraseList.length;i++){
if($('#id_message').val().toLowerCase().indexOf(phraseList[i]) > -1){
doEgg();
}else{
undoEgg();
}
}
});
然而,在每次上键时,indexOf的值被临时设置为-1,直到它遍历字符并找到错误的单词。
这会导致doEgg();和undoEgg ();被连续不断地叫来,这可不是我想要的。
是否有任何方法来计算。indexof(),但只有在文本区域已经看过了吗?因此,它只给indexOf()赋值一次。
据我所知,onChange不适合我所需要的,因为我希望函数运行为人员类型,而不是当整个文本区已经完成。
感谢编辑。
被调用的函数有:
function doEgg(){
// if(changeback)clearInterval(changeback);
audioElement.play();
// var change = setInterval(function () {
change = setInterval(function () {
var all = $('#wall_container').find('img').not('.easter');
var random = Math.floor(Math.random()*all.length)
var Rimg = $( all[random] )
var cdown = all.length;
var r = 1+Math.floor(Math.random()*33);
Rimg.attr('data-oldsrc', Rimg.attr('src')).attr('src', 'http://localhost:8888/wp-content/uploads/crying/crying'+r+'.gif').addClass('easter');
if(cdown==0){
clearInterval(change);
}
}, 500)
}
function undoEgg(){
// if(change)clearInterval(change);
audioElement.pause();
// var changeback = setInterval(function () {
changeback = setInterval(function () {
var all = $('#wall_container').find('img').filter('.easter');
var random = Math.floor(Math.random()*all.length)
var Rimg = $( all[random] )
var cdown = all.length;
Rimg.attr('src', Rimg.attr('data-oldsrc')).removeClass('easter');
if(cdown==0){
clearInterval(changeback);
}
}, 500)
}
你是什么意思?像这样的?
var phraseList = [
"foo foo",
"foobar",
"foobity foofoo foo"
];
$(function() {
$("#id_message").on('keyup', function() {
$("#result").empty();
for(var i=0;i<phraseList.length;i++) {
if($('#id_message').val().toLowerCase().indexOf(phraseList[i]) > -1){
$("#result").append("found<br>");
} else {
$("#result").append("not found<br>");
}
}
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<input id="id_message">
<div id="result"></div>
或者像这样:
var phraseList = [
"foo foo",
"foobar",
"foobity foofoo foo"
];
$(function() {
$("#id_message").on('keyup', function() {
var $result = $("#result").empty();
var val = this.value.toLowerCase();
var words = phraseList.filter(function(e,i){ return val.indexOf(e)> -1 });
if(words.length) {
$result.append("found<br>");
} else {
$result.append("not found<br>");
}
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<input id="id_message">
<div id="result"></div>
EDIT:您可以通过timeout设置延迟:
var phraseList = [
"foo foo",
"foobar",
"foobity foofoo foo"
];
$(function() {
var timeout = 0;
$("#id_message").on('keyup', function() {
clearTimeout(timeout);
var $result = $("#result").empty();
var val = this.value.toLowerCase();
var words = phraseList.filter(function(e,i){ return val.indexOf(e)> -1 });
timeout = setTimeout(function(){
if(words.length) {
$result.append("found<br>");
} else {
$result.append("not found<br>");
}
}, 500);
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<input id="id_message">
<div id="result"></div>
这些500
是毫秒级的,如果你想让它执行得更迅速,设置它更接近0
,反之亦然
不要使用for
循环。用inArray
法代替indexOf
法
试试这个代码片段:
var phraseList = [
"foo foo",
"foobar",
"foobity foofoo foo"
];
$("#id_message").on('keyup', function () {
var value = $('#id_message').val();
if ($.inArray(value, phraseList) != -1) {
doEgg();
} else {
undoEgg();
}
});
function doEgg() {
alert("do");
}
function undoEgg() {
alert("undo");
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<input type='text' id='id_message' />
更新:
将match
方法与RegEx
方法一样使用。
var phraseList = [
"foo foo",
"foobar",
"foobity foofoo foo"
];
$("#id_message").on('keyup', function () {
var value = $('#id_message').val().toLowerCase(),
flag = [];
flag = $.map(phraseList, function (val) {
var re = new RegExp("''b" + val + "''b","g");
if (value.match(re))
return val;
});
if (flag.length)
doEgg();
else
undoEgg();
});
function doEgg() {
alert("do");
}
function undoEgg() {
alert("undo");
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<input type='text' id='id_message' />
希望这对你有帮助!
相关文章:
- 当鼠标悬停在文本中的单词上时显示警报
- 匹配一个单词,其中候选人可以跨越顺序组(跨度)
- 如何使用jquery强制一个单词更改大小写等以保留品牌
- 拆分单词jquery
- 如何让程序检查所选单词中是否有按键
- 如何在悬停时流畅地更改单词
- EmberJS中支持单字母单词模型
- 字母计数:返回重复字母数最多的第一个单词
- 短语中类似单词的正则表达式交替
- CKEditor-自定义单词或短语插入功能
- Javascript从2个单词短语中删除第二个单词,而无需更改第一个单词
- 将引号中的短语视为 javascript 中的单词
- 正则表达式:匹配单词或短语
- 针对短语中的单词的Angular过滤器
- JavaScript RegEx不包括某些单词/短语
- 用于短语(不只是单词)的正则表达式
- 从文本中提取关键短语(1-4个单词)
- (JQuery)在文本框中使用单词或短语触发动作
- .on('keyup')计算特定单词或短语的.indexof
- 如何在javascript中创建文本框和最长单词按钮来查找html中短语中最长的单词