【问题标题】:jQuery form zip code to state functionjQuery表单邮政编码状态功能
【发布时间】:2009-11-25 18:13:16
【问题描述】:

我正在尝试将预先存在的 javascript 函数转换为 jQuery 函数。 函数来自http://javascript.internet.com/forms/zip-to-state.html 并旨在将用户输入的邮政编码转换为状态。我使用的是 jQuery 1.3.2,带有所有必要的插件,但我不太熟悉 jQuery 语法以及如何将其从普通的 Javascript 语法转换。

setState 函数有两个参数,邮政编码元素和状态元素,所以我尝试做这样的事情:

$('$zip_code').change( function () { setState($(this), $('#state')); });

对这种语法有什么想法吗?谢谢,达科他州

function getState(zip) {
    if ((parseInt(zipString.substr(zip / 4, 1), 16) & Math.pow(2, zip % 4)) && (zip.length == 5))
        for (var i = 0; i < stateRange.length; i += 7)
            if (zip <= 1 * stateRange.substr(i, 5))
                return stateRange.substr(i + 5, 2);
    return null;
}

function setState(txtZip, optionBox) {
    if (txtZip.value.length != 5 || isNaN(txtZip.value / 4)) {
        optionBox.options[0].selected = true;
        alert("Please enter a 5 digit, numeric zip code.");
        return;
    }

    var state = getState(txtZip.value);

    for (var i = 0; i < optionBox.options.length; i++)
        if (optionBox.options[i].value == state)
            return optionBox.options[i].selected = true;
    for (var i = 0; i < optionBox.options.length; i++)
        if (optionBox.options[i].value == "XX")
            return optionBox.options[i].selected = true;
}

【问题讨论】:

    标签: javascript jquery forms syntax


    【解决方案1】:

    你可以让 getState 和 setState 函数保持原样,但是在你询问如何使用它之前,你应该真正阅读 jQuery。如果您甚至不知道语法,您可能想了解如何使用它。

    就像 Aberon 说的,在这种情况下使用模糊,将 '$zip_code' 更改为 '#zip_code',其中 'zip_code' 对应:

    <input type="text" id="zip_code" name="whatever_you_want" />
    

    您还想要一个 id 为“状态”的选择框:

    <select id="state">
       ... options ...
    </select>
    

    但是,Aberon 的解决方案仍然行不通,因为它不完整...

    $('#zip_code').blur( function () { setState($(this)[0], $('#state')[0]); });
    

    您想从 zip_code 输入元素中获取值,因此需要调用 val()。您还需要 id == 'state' 的选择框的 DOM 元素,因此您需要第一个元素,而不是使用 $('#state') 返回的数组。

    试试看,希望对你有帮助。

    -斯蒂芬

    【讨论】:

    • 谢谢,斯蒂芬。我的背景是 PHP,但显然 $ 应该是 #。另外,感谢您为#state 元素调用 DOM 数组的第一个元素为我指明了正确的方向。玩了一圈,发现原来的函数不需要#zip_code值作为参数,而是整个元素。适当的函数调用结果是: $('#zip_code').blur( function () { setState($(this)[0], $('#state')[0]); });非常感谢您的详尽回答。最好的,达科他州。
    • 太好了,很高兴能帮上忙。我更新了我的帖子以进行您提到的更改。如果编写这些 zip 和 state 函数的人添加了一些关于如何使用它们的 cmets,那肯定会有所帮助。我只是快速扫了一眼,假设它以字符串作为参数而不是 DOM 元素。
    【解决方案2】:

    除非您的 zip 字段是下拉列表,否则您最好在函数中使用 blurkeyup

    $('#zip_code').blur( function () { setState($(this), $('#state')); });
    

    我还将$zip_code 更改为#zip_code

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-11
      • 1970-01-01
      • 2021-02-17
      • 2018-03-14
      • 1970-01-01
      • 2014-09-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多