AJAX生成的选择不会重定向

时间:2011-01-08 05:30:39

标签: javascript jquery ajax

所以,基本上我有这个选择/下拉菜单,我使用AJAX来检索和创建,但是当选择了一个选项时(所以onChange)我希望它重定向!

虽然,这仍然无法正常工作,但我在尝试时不会抛出任何错误,并尝试执行alert()调试方法,但警报不会被调用。

jquery的

$("#schoolMenu").change(function() {
  option = $("#schoolMenu option:selected").text();

  alert(option);

  if(option != "- Please Select -") {
   window.location = "http://www.itmustbecollege.com/pics/pics-from-"+$("#schoolMenu option:selected").val(); 
  }
  });

这是用来调用AJAX的东西

//   //填充学校   //

 $("#state").change(function() {
  option = $("#state option:selected").text();

  if($(this).attr("class") == "menu") {
   if(option != "- Please Select -") {
    $.ajax({
     type: "GET",
     url: "/includes/functions.php",
     data: "f=school&p="+option+"&m=yes",
     success: function(msg) {
      $("#fSchool").html("<p style=\"margin-left: 20px;\">Select School:</p>"+ msg);
      $("#fSchool").show();
      $("#school").focus();
     }
    });
   }
   else {
    $("#fSchool").html("");
    $("#fSchool").hide();
   }
  }
  else {  
   if(option != "- Please Select -") {
    $.ajax({
     type: "GET",
     url: "/includes/functions.php",
     data: "f=school&p="+option,
     success: function(msg) {
      $("#fSchool").html(msg);
      $("#fSchool").show();
      $("#school").focus();
     }
    });
   }
   else {
    $("#fSchool").html("");
    $("#fSchool").hide();
   }
  }
  });

如果你在那个栏上看http://www.itmustbecollege.com/quotes/,你可以做到“排序”最新|类别|校

如果您将鼠标悬停在学校上方,则会显示一个下拉列表,选择任何国家/地区,然后会显示另一个国家/地区,但是如果更改了该项目,则不会发生任

这是第二次下拉的PHP

// Get College List
function getCollege($state, $m = "no", $l = "no") {

// Displays Schools
if($m == "yes") {
 $options = '<select id="schoolMenu" name="school"><option value="select" selected="selected">- Please Select -</option>';
}
else if($l == "yes" || $l == "yes2") {
 $options = '';
}
else {
 $options = '<select name="school"><option value="select" selected="selected">- Please Select -</option>';
}

$listArray = split("\|\\\\", $list);

for($i=0; $i < count($listArray); $i++) {

 if($m == "yes") {
  $options .= '<option value="'. trim(titleReplace($listArray[$i])) .'">'. trim($listArray[$i]) .'</option>';
 }
 else if($l == "yes") {
  $options .= '<li><a href="/quotes/quotes-from-'. titleReplace($listArray[$i]) .'" title="'. trim($listArray[$i]) .' Quotes">'. trim($listArray[$i]) .'</a></li>';

 }
 else if($l == "yes2") {
  $options .= '<li><a href="/pics/pics-from-'. titleReplace($listArray[$i]) .'" title="'. trim($listArray[$i]) .' Pictures">'. trim($listArray[$i]) .'</a></li>';

 }
 else {
  $options .= '<option value="'. trim($listArray[$i]) .'">'. trim($listArray[$i]) .'</option>';
 }
}

echo $options .='</select>';
return false;
}

任何帮助都会很棒!

编辑:此外,我对菜单的下降方式有点奇怪,当你将鼠标悬停在任何其他“排序依据”链接上时,它们会消失,这是“按学校排序”的问题,因为第一个选择框显示列表,如果你去选择一所学校然后以某种方式漂浮在另一个链接上,它会消失,有关如何延迟或修复那个小问题的任何帮助吗?

1 个答案:

答案 0 :(得分:1)

这是因为页面加载时#schoolMenu元素不存在,因此不会分配.change()处理程序。

您可以在到达时进行分配。

var fSchool = $("#fSchool").html("<p style=\"margin-left: 20px;\">Select School:</p>"+ msg);

fSchool.find("#schoolMenu").change(function() {
  option = $(this).find("option:selected").text();

  alert(option);

  if(option != "- Please Select -") {
     window.location = "http://www.itmustbecollege.com/pics/pics-from-"+$("#schoolMenu option:selected").val(); 
  }
});

fSchool.show();

请注意,我在$("#fSchool")变量中缓存了fSchool,而不是从DOM中重复选择它。

.change()处理程序中,我使用this而不是"#schoolMenu"引用接收事件的元素,以避免重复选择DOM。