【问题标题】:using onChange for menu selection in jquery在 jquery 中使用 onChange 进行菜单选择
【发布时间】:2009-09-01 11:42:46
【问题描述】:

我下面的代码工作正常,用于用动态<options> 填充<select> 项目 问题是说我最终得到 3 <options> 说:一/二/三然后我选择第一个 <option> 以便我可以调用 jquery 代码来填充下一个菜单。其中一个已经是菜单中的<selected> 项,因此它不会被识别为 onChange 事件。

所以我需要先选择二然后选择一来调用 onChange for One。

我应该使用什么来代替 onChange?或者我应该输入一个空白的<option> 项目作为默认值?所以总会有变化?

//if the job menu is changed
$('#job').change (function () 
{

    $.get('ajax/employee_menu.php', { job: $('#job').val() },      
    function(data) 
    {
        //load the <options> into the element
        $("#employee").html( data );
        // show the menu once loaded
        $("#employee").css({ "display" : "inline" });
     });
});

【问题讨论】:

    标签: php jquery


    【解决方案1】:

    事实上,我上周正在处理的一个页面上遇到了同样的问题。我分离了 onChange 函数并在 document.ready 上调用,这样它就可以立即使用 First 选定的值调用。

    $(function()
    {
        ChangeFunction();
    });
    
    $('#job').change(ChangeFunction);
    
    function ChangeFunction()
    {
        $.get('ajax/employee_menu.php', { job: $('#job').val() },      
        function(data) 
        {
            //load the <options> into the element
            $("#employee").html( data );
            // show the menu once loaded
            $("#employee").css({ "display" : "inline" });
        });
    }
    

    【讨论】:

    • 我的 onReady 函数的第一个函数是什么?
    • 是的,'$(function()' 行是 '$(document).ready(function()' 的简写。
    • 好的,我基本上看到了你所做的,但使用 JavaScript 和 Jquery 还不足以改变它。你能修改我的代码吗?
    • 好的,我明白了,但这只是根据加载菜单的菜单显示在页面加载上。如果我然后更改菜单项也不起作用......当页面加载时,它会根据#job 菜单的值加载#employee 菜单。但是,如果我再次单击#job 菜单进行更改,则该函数不会调用并且#employee 菜单不会重新加载。
    【解决方案2】:

    不同的浏览器对&lt;select /&gt; 元素事件提供不同的支持。您可以使用 onclick 事件,但它仅在 Firefox 中完全受支持。其他浏览器不支持。

    您最好使用onchange 事件并提供默认选项。或者,您可以使用 jQuery 将 &lt;select /&gt; 标记更改为纯粹基于 HTML 的组合框,就像在这个 jquery.combobox 插件中一样。这可能更适合您的目的。

    目前,下拉菜单对标准事件没有任何接近一致的支持(不幸的是,过去几年也没有)。

    【讨论】:

      【解决方案3】:

      您可以使用 PHP 预填充第二个选择,因此页面也使用 OPTION 元素呈现第二个选择。反正我就是这么做的。

      【讨论】:

      • 但是我的每个菜单都是基于以前的.. 工作 -> 显示可以完成该工作的员工 ->> 显示这些员工被设置为可以工作的轮班......
      • @ian,我明白这一点。但是,第一个选择选择了它的第一个选项,因此您已经知道在使用 PHP 呈现页面服务器端时第二个选择应该包含什么。然后当用户为第一个选择选择另一个选项时,JavaScript 将更改第二个选择的内容。
      • 那是...它的作用是什么?问题是呈现的菜单是否有项目。 Cook Baker Bartender 然后你必须选择面包师。如果你想选择厨师,那么回到厨师,因为菜单已经是第一个呈现的项目。库克……因此不是 onChange。还是我完全错过了你所说的......
      • 我说的是这个。您使用 PHP 渲染列表厨师、面包师、调酒师,并且您已经知道厨师是列表中的第一项,因此您决定在第二个选择中也渲染与厨师关联的列表。然后,在浏览器中,用户不必为厨师触发 onchange 事件,因为第二个元素已经具有与厨师关联的列表。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-21
      • 1970-01-01
      • 1970-01-01
      • 2012-08-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多