我的功能正常工作,直到您输入一个特殊字符,如(,+, - ,},... 然后我的页面开始滞后,显示的项目"闪烁" (它们出现=>消失=>出现=> ...)。我该怎么做才能禁止输入任何特殊字符值?
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>
这是list.php代码:
$slot = intval($_GET['slot']);
$level = intval($_GET['level']);
if(isset($_GET['name'])){
$name = $_GET['name'];
}
else {
$name = '';
}
$result = $db->prepare("SELECT * FROM item WHERE level <= :level AND name like :name ORDER BY level DESC");
$result->execute(array(':level'=>$level, ':name'=>'%'.$name.'%'));
$result->setFetchMode(PDO::FETCH_OBJ);
echo '<table>';
while($row = $result->fetch()){
echo '<tr onclick="itemInfo('.$slot.','.$row->id.',0)">';
echo '<td width="10%">'.$row->level'</td>';
echo '<td width="90%">'.$row->name.'</td>';
echo '</tr>';
}
echo '</table>';
showList函数由以下内容调用:
$('#S1').on({
mouseover: function(){
$('#head').show();
},
mouseleave: function(){
$('#head').hide();
},
click: function(){
modalContent(1);
showList(1);
}
});
答案 0 :(得分:1)
我无法看到任何暗示+
或类似问题的内容,但您每次致电时都不想重新挂钩keyup
{{} 1}}。只需将其连接起来一次:
showList
...首先致电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);
替换为。但根据你问题中的HTML,它不是:
gearName
您的代码正在更新<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>
;这不会取代#list
。
您已经说过已经将其挂钩#gearName
,但这不是正确的地方。您已经说过在HTML结束时将代码连接起来并不起作用,但从根本上说,确实如此。这是showList
代表setTimeout
的完整示例:Live Copy
$.ajax