0

ページリダイレクトが発生した場合に値を返すために$_SESSIONを使用しています。

jqueryは$_SESSIONにアクセスできないため、PHPを使用して値を非表示のdivに出力し、値が取得されたらそのdivを削除することにしました。これを行うためのより良い方法があると思いますが、$_SESSION変数をjqueryに公開する他の方法がわかりません。

<?php       
    $pass_Back = $session->get_Pass_Back();
    $session->clear_Pass_Back();
?>

<?php
    if (count($pass_Back) != 0){
        echo "<input class=\"field_Input_Left\" id=\"schedule_Description\" type=\"text\" name=\"schedule_Description\" value=\"" . array_shift($pass_Back) . "\"/><br />";
        echo "<div id=\"pass_Back\" style=\"visibilty: hidden;\" ></div>";
    } else {    
        echo "<input class=\"field_Input_Left\" id=\"schedule_Description\" type=\"text\" name=\"schedule_Description\"/><br />";
    }
?>

これが完了したら、この新しい要素がDOMに追加されたかどうか、いつ追加されたかをjqueryに通知するメソッドが必要でした。したがって、要素が追加されたときに一致するようにプラグインlivequeryを使用しました。これは素晴らしいことです。

しかし、divの値にアクセスしようとすると、未定義であると表示されます。

$("#pass_Back").livequery(function(){
    if ($("#class_Name").val() != 0){
        var class_Name = $("#class_Name").val();
        get_Schedule_Data(class_Name);
    } else {
        var class_Name = "ALL";
        get_Schedule_Data(class_Name);
    }   


    $value = $(this).attr("value");
    auto_Fill_Schedule($("#pass_Back").attr("value"));

    // destroy pass back

    $("#pass_Back").remove();
});

firebugで確認すると、livequeryが追加された要素を検出した時点で、htmlが表示されないことに注意してください。DOMの準備ができていないと、livequeryが機能しませんでしたが、これが値が見つからない理由ですか?

どんな指導もありがたく受けました。

4

2 に答える 2

1

これを使用しないでください:

$value = $(this).attr("value");

値を取得するには、次の手順を実行します(ほとんどの場合、入力用)。

$(this)(あなたの入力であると仮定して)

$value = $(this).val();

場合divによっては、はありませんが、値として内部からまたはvalueを取得できます。htmltext

$(this)(あなたのdivであると仮定して)

$value = $(this).html();
//or:
$value = $(this).text();

知っているだけ...

PHPとjQueryを混在させることができますが、理解を深めるために、この投稿からの私の回答を見てください。

サーバーサイドロジックに条件付きでJavascriptコードをエコーすることは、有害であると見なされますか?

于 2012-08-08T06:35:13.713 に答える
1

$ _SESSION配列全体、または重要なものを出力しない限り、問題はありません。

<?php       
    $pass_Back = $session->get_Pass_Back();
    $session->clear_Pass_Back();

    if (count($pass_Back) != 0){
        echo '<div id="passBack" type="text" value="'.implode(",", array_shift($pass_Back)).'" />';
    }
 ?>

JS

 $(function() {
     if ($("#passBack").length) {
         //element exists in DOM, get the value
         var passBack_data = this.value;
         //do something with the value
     }
 });

要素を出力し、それが配列ではなく文字列であることを確認し(私が使用implode()した)、ページロード時にそれが存在するかどうか(長さがあるかどうか)を確認し、値を取得します。

于 2012-08-08T06:43:17.483 に答える