2009-09-01 31 views
1

我下面的代码工作正常,并用于填充<select>项目动态<options> 的问题是说,我结束了3 <options>说:单/双/三,然后我选择第一个<option>,这样我就可以调用jquery代码来填充下一个菜单。其中一个已经是菜单中的<selected>项目,因此它不会被识别为onChange事件。使用的onChange在jQuery的菜单选择

所以我需要选择Two然后One来调用onChange。

有什么我应该使用,而不是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" }); 
    }); 
}); 

回答

0

不同的浏览器为<select />元素事件提供不同的支持。您可以使用onclick事件,但只能在Firefox中完全支持。其他浏览器将不支持它。

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

下拉式菜单对当前标准事件的支持没有任何接近的支持(并且在过去的几年里不幸)。

1

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

$(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" }); 
    }); 
} 
+0

什么是我的onReady函数的第一个函数? – ian 2009-09-01 11:52:39

+0

是的,'$(function()'是'$(document).ready(function()'的缩写。 – Scott 2009-09-01 11:54:49

+0

好吧,我基本上看到你做了什么,但没有足够好的JavaScript和Jquery来改变它。改变我的代码? – ian 2009-09-01 11:58:21

0

您可以使用PHP预先填充第二个选择,因此页面也会为第二个选择使用OPTION元素进行渲染。无论如何,这就是我所要做的。

+0

但是我的每个菜单都基于以前的工作 - >显示可以完成这项工作的员工 - >>显示这些员工被设置为可以工作的班次...... – ian 2009-09-01 12:23:53

+0

@ian,我明白,但是,第一个选择选择了第一个选项,所以你已经知道第二个选择在渲染时应该包含什么PHP的页面服务器端。然后,当用户选择第一个选择的另一个选项时,JavaScript将更改第二个选择的内容。 – 2009-09-01 12:36:34

+0

这就是...它做了什么?问题是如果呈现的菜单中包含项目。库克贝克调酒师,那么你必须选择面包师。然后回到煮菜,如果你想选择厨师,因为菜单已经是第一个呈现的项目。库克...因此不是一个onChange。或者我完全错过了你的话... – ian 2009-09-01 12:53:27