0

我是 jquery 的新手。我不知道为什么这段代码不起作用。我有 3 个下拉框。根据 f_cat1 和 f_cat2 ,将获取 f_university_name ,因为 f_cat1 和 f_cat2 不能为空,这就是为什么我要检查 f_university_name 是否为空,并尝试在其中收集数据。或 f_cat1 或 f_cat2 被改变,也试图做这个操作。

有人能帮帮我吗?这是我的代码:

$(document).ready(function(){

     var cat1= $('#f_cat1').val();    // f_cat1,f_cat2 is the id of a dropdown box 
     var cat2= $('#f_cat2').val();

     $('#f_cat1').change(make_change);
     $('#f_cat2').change(make_change);

     var uni_name= $('#f_university_name').val();  
     if(uni_name=="")
     {
         make_change();
     }

});

function make_change()
{
    var post_url ="<?php echo $c_link.'get_university/';?>"+ cat1+'/'+cat2;
    //  alert(post_url);
    $.ajax({
        type: "POST",
        url: post_url,
        //  dataType : "JSON",
        success: function(unis) 
        {
           //  alert('hi');
           $('#f_university_name').empty();
           $.each(unis,function(university_id,university_name)
           {
              var opt = $('<option/>'); 
              opt.val(university_id);
              opt.text(university_name);

              $('#f_university_name').append(opt);
           });


     } //end success
  }); //end AJAX
}

编辑后1:感谢大家回复我,它已经开始工作了。但问题是我无法评论我的声誉很低。我是堆栈溢出的新手,我不知道规则。而且我无法点击任何东西......我怎么能摆脱这个?

4

3 回答 3

2

在你的函数中没有变量cat_1和,因为它们是本地的。将功能的定义移到块中,然后您就可以访问它们了。cat_2make_change$(document).ready(function () { ... });make_change$(document).ready(function () { ... });

于 2012-08-02T07:38:57.367 回答
0

将变量放在 document.ready 函数之外。意味着全球访问。然后你可以在任何你想要的地方使用它们

于 2012-08-02T07:46:22.427 回答
0

您将在这里遇到的主要问题是您读取页面第一次加载的值f_cat1和时间,并且永远不会再次读取它们:f_cat2

$(document).ready(function(){

     var cat1= $('#f_cat1').val();    // f_cat1,f_cat2 is the id of a dropdown box 
     var cat2= $('#f_cat2').val();

     ....

这意味着无论这两个下拉列表的值在开始时是什么,变量cat1cat2永远不会改变。

解决此问题的最简单方法是每次调用函数时读取这些变量make_change

function make_change()
{
    var cat1= $('#f_cat1').val();    
    var cat2= $('#f_cat2').val();
    var post_url ="<?php echo $c_link.'get_university/';?>"+ cat1+'/'+cat2;
    ....
于 2012-08-02T07:51:13.310 回答