2011-01-08 25 views
1

したがって、基本的には、AJAXを使用して取得して作成するこの選択/ドロップダウンメニューがありますが、オプションが選択されているので(これによりonChange)、リダイレクトします。AJAXで生成された選択はリダイレクトされません

これはまだ動作していませんが、試してもエラーが表示されず、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/あなたが "並べ替え"を行うことができるバーで人気|最新の|カテゴリ|学校

学校にカーソルを合わせると、国が選択され、別の国が表示されますが、変更されても何も起こりません。ここ

は、任意のヘルプは素晴らしいことだ

// 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; 
} 

ダウン、第2のドロップのためのPHPです!

EDIT:また、メニューのドロップダウンがちょっと変わっていて、他の「ソートバイ」リンクにマウスを置くと消えます。これは「学校別ソート」の問題です最初の選択ボックスにはリストが表示され、学校に行くと何か別のリンクが表示されていればそれが消えてしまいます。

答えて

1

ページが読み込まれたときに#schoolMenu要素が存在しないため、.change()ハンドラが割り当てられないためです。

到着時に割り当てることができます。私が代わりに何度DOMからそれを選択するので、fSchool変数に$("#fSchool")をキャッシュし

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(); 

注意。

そして.change()ハンドラ内で、私は繰り返しDOMの選択を避けるために、再びthisの代わり"#schoolMenu"を、使用してイベントを受け取った要素を参照します。

+0

この場合、ライブまたはデリゲートが機能しません。 –

+1

@Caspar:良い質問です。動作すると思われますが、どちらの方法でも、特定の要素を対象とした特定のハンドラであるため、直接バインドする方が好きです。 – user113716

関連する問題