0

ユーザーからの動的メッセージを保持するテーブルがあり、管理者は返信をクリックしてこれらのメッセージに返信できます。完璧に動作します。問題は、ダイアログでユーザー メッセージを開くためのリンクがあるため、ユーザー メッセージ全体を返信と同じように表示できることです (返信した場合)。ダイアログ ボックスは 1 回だけ表示されます。もう一度クリックしても表示されません。

どんな助けでもいただければ幸いです

テーブル

foreach($content as $row)
{
    //print_r($row);
    echo '<tr data-id="'.$row['ConID'].'" input type="hidden" value="'.$row['ConID'].'">';
    echo '<td data-cn="'.$row['ConName'].'">'.$row['ConName'].'</td>';
    echo '<td data-em="'.$row['ConEmail'].'">'.$row['ConEmail'].'</td>';
    echo '<td data-cm="'.$row['ConMessage'].'" >'.substr($row['ConMessage'],0,30).'<a href="#" class = "open"> ...more</a><div class = "dialog"> <p>'.$row['ConMessage'].'</p></div></td>';
    echo '<td data-dt="'.$row['ConDate'].'">'.date('d/m/y', strtotime($row['ConDate'])).'</td>';
    if($row['Replied'] == 0){
        echo '<td data-rp="'.$row['Replied'].'">No</td>';
    }
    else{
        echo '<td><a href="#" class="openReply">See Reply</a><div class = "dialogReply"><p>'.$row['Reply'].'</p></div></td>';
    }
    if($row['Replied'] == 0){
        echo '<td><input type="button" class="replySender" id="replySender" value="Reply"/></td>';
    }
    else{
        echo'<td>Replied</td>';
    }
    echo '</tr>';
}

Jクエリ

$(".dialog").hide(); $(".open").click(function(){
    $(this).next(".dialog").dialog();  
});
$(".dialogReply").hide(); $(".openReply").click(function(){
    $(this).next(".dialogReply").dialog();  
});
4

2 に答える 2

1

2回目が機能しない理由は、最初に $('#my_div').dialog() を「実行」すると、要素 #my_div がボディのルートに移動するためです。ラッパー (DIV) であるため、要素が存在しないため、$.next() は 2 回目に失敗します。私の提案は、ダイアログにIDを設定し、それらのIDをアンカー()に保存することです。すなわち

<td>
    <a href="#" class="openReply" data-dlg-id="random-id-1">See Reply</a>
    <div class="dialogReply" id="random-id-1">
        <p>My Reply</p>
    </div>
</td>
<td>
    <a href="#" class="openReply" data-dlg-id="random-id-2">See Reply</a>
    <div class="dialogReply" id="random-id-2">
        <p>Other Reply</p>
    </div>
</td>

そしてあなたのJavaScriptは次のようになります:

$(".dialogReply").hide();

$(".openReply").click(function(){
      var $dlg = $('#'+ $(this).attr('data-dlg-id'));
      if ($dlg.hasData('dialog'))
        $dlg.dialog('open');
      else
        $dlg.dialog();
});

これが役立つことを願っています。一番!

于 2012-11-29T03:34:52.850 に答える
0

返信ありがとうございます。整理してます。

したがって、クリックするとdivが削除されます。jquery clone() を使用して修正しました:

$(".dialog").hide();

$(".open").click(function(){ $(this).next(".dialog").clone().dialog(); }); $(".dialogReply").hide(); $(".openReply").click(function(){ $(this).next(".dialogReply").clone().dialog(); });

于 2012-11-29T03:52:34.993 に答える