1

我需要根据表单文本输入字段上的信息输入来填充选择列表。我弄清楚了 Ajax 部分,但它没有按预期工作。这个想法是当用户在名字字段中输入时,选择列表将填充适当的选项。该函数确实有效,但 var firstname = $("#fn").val(); call 将始终返回比字段中键入的内容少一个字符。任何帮助将不胜感激!

以下是相关的html和代码:

<html>
<head>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<script>
$(document).ready(function(){
$("#fn").keypress(function() {
    var firstname = $("#fn").val();
    $.get("CustomerList", {FirstName: firstname}, function(responseText) {
    $("#div1").text(responseText);
    });
});
    });
</script> 
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Show all names</title>
</head>

<body>
    <form method="GET" action='Controller' name="CreateNTF"   >
    <table>
        <tr>
            <td>Create User:</td>
            <td><input id="fn" type="text" name="FirstName" /></td>
            <td><input id="ln" type="text" name="LastName"/></td>
        </tr>  
        <tr>
            <td>Carrier</td>
            <td>
            <span id="div1"></span>
            </td>
        </tr>
    </table>
    <input type="submit" name="submit" value="Submit" onClick="return validateForm();"/>
    </form>
</body>

</html>
4

2 回答 2

1

尝试使用keyup而不是keypress. 也许keypress触发得太早而无法.val()识别文本更改。

另一种解决方案是自己计算最终字符串:

$("#fn").keypress(function(e)
{
    var firstname = $("#fn").val() + String.fromCharCode(e.which);
    $.get("CustomerList", {FirstName: firstname}, function(responseText) {
    $("#div1").text(responseText);
    });
});

但最后,这家伙似乎和你有同样的问题,建议的解决方案也是一样的。

于 2013-01-17T18:47:04.273 回答
0

使用 keyup 和 keypress,您将触发每个字符的 AJAX 调用。我认为您可能想要使用 change 事件,当输入框失去焦点时触发 ajax 调用,这是在用户完成输入并从输入框出来之后。这样,您将拥有完整的输入字符串并避免不必要的 ajax 调用。

于 2013-01-17T19:06:12.110 回答