1

誰かが私を迷惑な問題に正しい方向に向けることができることを願っています.

コードを挿入する前に要約します。「bookings.php」と呼ばれるjavascriptを含むhtmlファイルと、php「getBookings.php」を含むphpファイルの2つのファイルがあります。

bookings.php ファイルには、メニュー、テキストなどのすべての静的情報と、javascript + ajax 呼び出しが含まれています。

javascript/ajax を使用して getBookings ファイルを正常に呼び出していますが、問題はありません。

私の問題は、ロードされたファイル(getBookings.php)からのものです。切り替えが必要な html 要素がいくつかあります。そのためのjQueryは、bookings.phpファイルに含まれています..しかし、ajaxファイルが呼び出されたときにjqueryは適用されず、機能しません。

getBookings.php のすべてのコンテンツが #bookingSummary 要素に読み込まれます。

さて、私のコードは非常に長いので、すべての重要な部分を含めます..

// Usual Head Content, Meta, CSS, jQuery files
// Filters
<script language="javascript" type="text/javascript">
function bookings()
{
    var fltr="";
    if(document.frm.bkid.value != "")
        fltr+='bkid='+document.frm.bkid.value+'&';

    if(document.frm.customer.value != "")
        fltr+='cid='+document.frm.customer.value+'&';

    if(document.frm.site.selectedIndex != 0)
            fltr+='sid='+document.frm.site.value+'&';

    if(document.frm.status.selectedIndex != 0)
        fltr+='st='+document.frm.status.value+'&';

    if(document.frm.supp.selectedIndex != 0)
        fltr+='sup='+document.frm.supp.value+'&';   

    if(document.frm.datefrm.value != "")
        fltr+='dfrm='+encodeURI(document.frm.datefrm.value)+'&dto='+encodeURI(document.frm.dateto.value);   

    document.getElementById('bookingsummary').innerHTML="<br /><p align='center'>    <img src='img/bigloading.gif'></p>";
    url='get/getBookings.php?'+fltr;
    getAjaxRec(url, viewbookings);

}


function viewbookings()
{
    if (xmlHttp.readyState == 4 && (xmlHttp.status==200 ||     window.location.href.indexOf("http")==-1))
    {
        document.getElementById("bookingsummary").innerHTML = xmlHttp.responseText;
    }   
 }

</script>

上記のコードは、すべて正常に動作する JavaScript です。以下は、上記の関数 - bookings() を呼び出す HTML コードです。

<!-- Several Form fields are here..-->
<input type="button" value="Apply Filter"  class="searchBtn" onClick="bookings();">


<!-- Show booking results -->
<div id="bookingsummary"></div>

ここで、getBookings ファイル内に、クラス名が「hiddenDetails」の html 要素があり、これを切り替える必要があり、その Jquery は次のとおりです。

<script type="text/javascript"> 
 $(document).ready(function() {

  $('.bookingKeyDetails').click(function()
  {         
        $(this).next('.hiddenDetails').slideToggle('medium");
  });

 });
</script>   

上記のコードはすべて、jquery とは別に機能します。ここに getBookings.php ファイルのスニペットがあります。jquery を適用したい部分です。

<?php
// A while loop happens then..
$result="           
<div class=\"bookingKeyInfo\">
<div class=\"lb1\"><input type=\"checkbox\" name=sup1x".$rw['id']." ></div>
<div class=\"lb2\"><a href=\"editbooking.php?id=".$rw['id']."\">".$rw['id']."</a>     </div>
<div class=\"lb3\">".date('d/m/Y', strtotime($rw['pickupDate']))." <strong><font     color=\"#FF0000\">".date('H:i', strtotime($rw['pickupTime']))."</font></strong></div>
<div class=\"clearLeft\"></div>
</div>

<div class=\"bookingKeyDetails\">
<div class=\"b-one\"><img style=\"margin-top:9px; padding-bottom: 5px;\"     src=\"$base_dir/img/".strtolower($rw['status']).".png\"></div>
<div class=\"b-two\"><img id=\"isCustomerEmailed\" style=\"margin-top:9px; padding-    bottom: 5px;\" src=\"$base_dir/img/unassigned.png\"></div>
<div class=\"b-three\"><img id=\"isSupplierEmailed\" style=\"margin-top:9px; padding-    bottom: 5px;\" src=\"$base_dir/img/unassigned.png\"></div>
<div class=\"b-four\"><img id=\"isSupplierConfirmed\" style=\"margin-top:9px; padding-    bottom: 5px;\" src=\"$base_dir/img/unassigned.png\"></div>    
<div class=\"b-trip\">".substr($rw['DA'],0,6)."..<strong> to </strong>     ".substr($rw['DB'],0,6)."..</div>
<div class=\"b-pax\">".$rw['pax']." Pax</div>
<div class=\"b-cost\">&euro;$cost </div>
<div class=\"b-supplier\">".substr($sup,0,10)."..</div>

<div class=\"clearLeft\"></div>

<div class=\"hiddenDetails\">More Booking Information...</div>
</div>";

echo $result;
?>

私はこれが問題の非常に長い説明であることを知っています..だから私は自分のコードをそのまま与えようとしました..

jQueryが機能しない理由について、誰かが光を当てることができます..czは、getBookingsから呼び出される要素ではなく、個別に機能します..

4

4 に答える 4

2

呼び出すページがjQueryをインスタンス化して切り替えるときに、切り替える必要のあるHTML要素がページ上になかったため、ajaxからの呼び出しが成功した後、関数を再初期化する必要があります。

あなたは彼らのAJAX呼び出しツールのためにjQuery.successコールバック関数を使うことができます...私はネイティブAJAXの代わりにこの種の処理を助けるためにそれを使います。生活をよりシンプルにし、クロスブラウザのサポートを向上させます。

成功したら、トグル関数を呼び出すだけです。

http://api.jquery.com/jQuery.post/

于 2013-01-26T12:32:25.487 に答える
2

bookingKeyDetails問題は、実際にページに存在する前に、jQuery を使用してイベント ハンドラーをバインドしていることです。この要素は、ページがロードされた後にのみ html に追加されるため、行ったアクション$(document).ready(function() {は適用されないことに注意してください。

html を変更した後にのみ、イベント ハンドラーをバインドします。

function viewbookings() 
{
  if (xmlHttp.readyState == 4 && (xmlHttp.status==200 || window.location.href.indexOf("http")==-1))
  {
    document.getElementById("bookingsummary").innerHTML = xmlHttp.responseText;
    $('.bookingKeyDetails').click(function()
    {         
      $(this).next('.hiddenDetails').slideToggle('medium');
    });
  }   
};
于 2013-01-26T12:31:02.360 に答える
0

関数呼び出しで一重引用符と二重引用符を使用しています

$(this).next('.hiddenDetails').slideToggle('medium");

ユーザー'medium'または"medium"

于 2013-01-26T12:32:08.657 に答える
0

「bookings.php」にJqueryを書き込んだため、トグルしないことは非常に明白です。Bookings.phpのページの読み込み中、getBookings.phpのコンテンツは検出されないため、そのIDで使用できる要素がないため、Jqueryは適用されません。

getBooking.phpを呼び出しているときの、Ajax成功イベントのtoogleのイベントをバインドする必要があります。

 $.ajax({
      url: URL,
      success: function(){
          $('.bookingKeyDetails').click(function()
          {         
             $(this).next('.hiddenDetails').slideToggle('medium");
          });
    },
      error: function(){
        alert('failure');
      }
    });
于 2013-01-26T12:33:31.060 に答える