搜索功能特殊字符错误

时间:2014-08-03 13:18:00

标签: jquery

我的功能正常工作,直到您输入一个特殊字符,如(,+, - ,},... 然后我的页面开始滞后,显示的项目"闪烁" (它们出现=>消失=>出现=> ...)。我该怎么做才能禁止输入任何特殊字符值?

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);
    }
});

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