Jquery 搜索函数特殊字符错误
我的函数工作正常,直到您输入一个特殊字符,如(,+,-,},。。。 然后我的页面开始延迟,项目显示为“闪烁”(它们出现=>消失=>出现=>…)。我可以做什么来禁止输入任何特殊字符值Jquery 搜索函数特殊字符错误,jquery,Jquery,我的函数工作正常,直到您输入一个特殊字符,如(,+,-,},。。。 然后我的页面开始延迟,项目显示为“闪烁”(它们出现=>消失=>出现=>…)。我可以做什么来禁止输入任何特殊字符值 function showList(id) { var level = $('#charLevel').val(); var name = $('#gearName').val(); var timer; $.ajax({ url: 'list.php',
function showList(id) {
var level = $('#charLevel').val();
var name = $('#gearName').val();
var timer;
$.ajax({
url: 'list.php',
type: 'get',
data: { 'slot': id, 'level': level, 'name': name },
success: function(data) {
$('#list').html(data);
$('#gearName').keyup(function() {
clearTimeout(timer);
var ms = 300;
timer = setTimeout(function() {
showList(id);
}, ms);
});
}
});
}
编辑:
以下是模态内容代码:
<input id="gearName" type="text" placeholder="Search..."/>
<table class="tableau">
<tr>
<td width="10%" class="top">L</td>
<td width="90%" class="top">Name</td>
</tr>
</table>
<div class="scroll" id="list">
</div>
我看不出有任何迹象表明问题出在
+
或类似问题上,但您确实不希望每次调用showList
时都重新连接keyup
。只需连接一次即可:
function showList(id) {
var level = $('#charLevel').val();
var name = $('#gearName').val();
$.ajax({
url: 'list.php',
type: 'get',
data: { 'slot': id, 'level': level, 'name': name },
success: function(data) {
$('#list').html(data);
}
});
}
function hookUpId(id) {
var timer = 0;
$('#gearName').keyup(function() {
clearTimeout(timer);
timer = setTimeout(function() {
showList(id);
}, 300);
});
}
…然后调用hookUpId(relevantValueHere);
在下面的评论中,您说过,
gearName
被代码所取代。但根据您问题中的HTML,它不是:
<input id="gearName" type="text" placeholder="Search..."/>
<!-- ^---------------------------------------------------- Here's '#gearName' -->
<table class="tableau">
<tr>
<td width="10%" class="top">L</td>
<td width="90%" class="top">Name</td>
</tr>
</table>
<div class="scroll" id="list">
<!-- ^--------------------------------------- Here's '#list' -->
</div>
尝试像这样对字符串进行编码,
encodeURIComponent(level)
。@user26409021:无需,当您为数据提供对象时,jQuery会这样做。不要在回调中附加事件处理程序。一个事件将有多个处理程序。@undefined是正确的,它会变得更慢和“滞后”因为附加了越来越多的处理程序,所以函数一直在调用自己,直到它几乎成为一个无休止的循环。从服务器返回的数据是什么样的?它是包含用户输入的级别的还是名称的呢?事实上,#gearName被这个ajax请求更改了。因此,如果我把它放在别处,它就不起作用了另外,当你点击一个特定的div时,这个id是由另一个函数给出的。所以我真的不知道如何获取这个id。@loumi:被更改还是被替换?如果它刚刚被更改,你就不必再连接它了。如果它被替换,是的,这意味着你必须重新连接它。看到你的HTML会有很大帮助。它被替换了。我将编辑我的问题一分钟内,与此函数相关的html和php。@loumi:在您提出问题的html中,gearName
不在list
内,list
是您要更新的唯一元素。因此,gearName
没有被替换。如上所述。这是真的。但是,当我将其从此函数中删除时,它没有工作我在函数中只放了一个警报对话框,当我输入值时什么也没有发生。这应该是因为模态内容代码是由modalContent(id)加载的。
function showList(id) {
var level = $('#charLevel').val();
var name = $('#gearName').val();
$.ajax({
url: 'list.php',
type: 'get',
data: { 'slot': id, 'level': level, 'name': name },
success: function(data) {
$('#list').html(data);
}
});
}
function hookUpId(id) {
var timer = 0;
$('#gearName').keyup(function() {
clearTimeout(timer);
timer = setTimeout(function() {
showList(id);
}, 300);
});
}
<input id="gearName" type="text" placeholder="Search..."/>
<!-- ^---------------------------------------------------- Here's '#gearName' -->
<table class="tableau">
<tr>
<td width="10%" class="top">L</td>
<td width="90%" class="top">Name</td>
</tr>
</table>
<div class="scroll" id="list">
<!-- ^--------------------------------------- Here's '#list' -->
</div>
<!DOCTYPE html>
<html>
<head>
<script src="//code.jquery.com/jquery-1.11.0.min.js"></script>
<meta charset="utf-8">
<title>Example</title>
</head>
<body>
<input id="gearName" type="text" placeholder="Search..."/>
<table class="tableau">
<tr>
<td width="10%" class="top">L</td>
<td width="90%" class="top">Name</td>
</tr>
</table>
<div class="scroll" id="list">
</div>
<script>
(function() {
"use strict";
function showList(id) {
var level = $('#charLevel').val();
var name = $('#gearName').val();
// Simulate ajax with setTimeout
setTimeout(function() {
$("#list").html(
'<table>' +
'<tr onclick="itemInfo(\'stuff here\')">' + // Note that I didn't bother to include itemInfo, so clicking won't actually do anything
'<td width="10%">random level: ' + Math.floor(Math.random() * 100) + '</td>' +
'<td width="90%">some name</td>' +
'</tr>' +
'</table>'
);
}, 50);
/*
$.ajax({
url: 'list.php',
type: 'get',
data: { 'slot': id, 'level': level, 'name': name },
success: function(data) {
$('#list').html(data);
}
});
*/
}
function hookUpId(id) {
var timer = 0;
$('#gearName').keyup(function() {
clearTimeout(timer);
timer = setTimeout(function() {
showList(id);
}, 300);
});
}
hookUpId('an-id');
})();
</script>
</body>
</html>