使用PHP在文本框和选择之间切换

时间:2013-06-19 21:13:37

标签: php html forms javascript-events

我有一个基本的客户信息表单,我想让它更具互动性。想法是,如果用户选择不是美国或加拿大的国家,则状态选择将变为状态文本框。我确信这可以用php完成但是已经使用jquery进行了辩论但是如果可能的话我想避免使用它。这是我的表格样本:

<tr>
    <td>
        <input name="city" type="text" id="city" value="<?= $this->aBillingProf['cCity']; ?>" />
    </td>
    <td>
        <select name="state" id="state" style="width:218px;position:relative;top:-4px;">
            <? $s = strlen($this->aBillingProf['cState']) == 2 ? strtoupper($this->aBillingProf['cState']) : strtoupper(stateTranslate($this->aBillingProf['cState']));
            echo stateSelect('both',$s); ?>
        </select>
        <input name="state" type="text" id="state" value="<?= $this->aBillingProf['cState']; ?>" />
/*The Idea being only one of the above options is available depending on what is selected from the country select */

    </td>
</tr>
<tr>
    <td>
        <label for="zip">Zip / Postal Code</label>
    </td>
    <td>
        <label for="country">Country</label>
    </td>
</tr>
<tr>
    <td>
        <input name="zip" type="text" id="zip" maxlength="6" value="<?= $this->aBillingProf['cZip']; ?>" />
    </td>
    <td>
        <select name="country" id="country" style="width:218px;position:relative;top:-4px;">
            <?= AffiliateStore::countrySelect($this->aBillingProf['cCountry']); ?>
        </select>
        <!-- <input type="text" name="country" id="country" value="<?= $this->aBillingProf['cCountry']; ?>" /> -->
    </td>
</tr>

感谢您的任何输入或建议

2 个答案:

答案 0 :(得分:1)

基本上我所做的是添加一个包含我需要的输入的div。在这种情况下,我会使用美国和加拿大国家的选择框和其他国家的文本输入。使用CSS diplay:none可以折叠除默认选定国家/地区之外的所有div。

<div id="state_inputs">
    <div id="us_states_div">
        <!-- Select box for US states goes here -->
    </div>
    <div style="display:none" id="ca_states_div">
        <!-- Select box for US states goes here -->
    </div>
    <div style="display:none" id="other_states_div">
        <input type="text" name="other_states" />
    </div> 
</div>

现在假设您所在国家/地区的选择框的ID为country_select:

<script>
document.getElementById("country_select").onchange = function() {
        var country_select = document.getElementById("country_select");
        var country = country_select.options[country_select.selectedIndex].text;

        if(country == "USA") {
            document.getElementById("us_states_div").style.display="block";
            document.getElementById("ca_states_div").style.display="none";
            document.getElementById("other_states_div").style.display="none";
        } else if(country == "Canada") {
            document.getElementById("us_states_div").style.display="none";
            document.getElementById("ca_states_div").style.display="block";
            document.getElementById("other_states_div").style.display="none";
        } else {
            document.getElementById("us_states_div").style.display="none";
            document.getElementById("ca_states_div").style.display="none";
            document.getElementById("other_states_div").style.display="block";
        }
    };
</script>

一旦您更新了PHP以输出该标记,在处理方面,您只需查看所选国家/地区,然后使用正确状态输入中包含的值。

答案 1 :(得分:0)

仅使用PHP无法实现这一点,因为它要求您使用客户端脚本来确定事件何时被触发。但是,您可以使用PHP重建表单,这需要从服务器重新加载。使用JavaScript处理事件和更新表单要容易得多。