2012-10-11 2 views
0

좋아, 그게 주제 넘은 제목이야 - 에 복잡하다.복잡한 jqueryui 대화 상자

개요 : (스크린 샷과 하단 업데이트 참조)
a. $(document).ready에서 jQuery/AJAX는 행당 하나의 연락처가있는 테이블을 만듭니다.
b. 각 테이블의 행은, 제 3 셀은이다 <a id="edit_83">edit</a> 태그 - "83"은 예이고, DB로부터 contact_id를 나타내고, 각각의 태그가 단계 (d)에서 사용되는 고유 한 ID 번호
C있을 것이다. AJAX 콜백
d에있는 각 연락처에 대해 jqueryui 대화 상자 (autoOpen = false)를 생성하십시오. 편집 닻이 클릭되면 jquery가 contact_id를 분리하고이를 사용하여 적절한 jQueryUI 대화 상자를 표시합니다.

목적 : 모든 테이블 행의 클릭 편집 에 링크가 해당 연락처 편집 양식과 jqueryui 대화 상자가 열립니다.

문제점 : 형태는 열리지 만 내부에 양식 필드가 없다. 사실, DOM에서 주입 된 form/div는 각 테이블 행에 대해 누락되었습니다. ???


HTML :

<div id="contact_table"></div> 

자바 스크립트/jQuery를 - AJAX 전화 :

$(document).ready(function() { 
$.ajax({ 
    type: "POST", 
    url: "ax_all_ajax_fns.php", 
    data: 'request=index_list_contacts_for_client&user_id=' + user_id, 
    success: function(data) { 
     $('#contact_table').html(data); 
     var tbl = $('#injected_table_of_contacts'); 
     tbl.find("div").each(function() { 
      $(this).dialog({ 
       autoOpen: false, 
       height: 400, 
       width: 600, 
       modal: true, 
       buttons: 
        { 
         Okay: function() { 
          $(this).dialog("close"); 
         }, 
         Cancel: function() { 
          $(this).dialog("close"); 
         } 
        } 
      }) 
     }); 
    } 
}); 
}); 

AJAX/PHP 1 - ax_all_ajax_fns.php :

,626,

AJAX/PHP 2 : - functions.php

function build_contact_table_for_client($user_id) { 
    $aContact_info = get_contact_data_ARRAY_user_id($user_id, 'first_name','last_name','email1','cell_phone', 'contact_id'); 
    $r = '<table id="injected_table_of_contacts"> 
      <tr> 
       <th width="120">Name</th> 
       <th width="200">Email Address</th> 
       <th width="100">Cell Phone</th> 
       <th>Action</th> 
      </tr> 
     '; 
    while ($rrow = mysql_fetch_array($aContact_info)) { 
     $r .= ' 
      <tr> 
       <td>'.$rrow['first_name'].' '.$rrow['last_name'].'</td> 
       <td>'.$rrow['email1'].'</td> 
       <td>'.$rrow['cell_phone'].'</td> 
       <td> 
        <a class="editcontact" id="edit_'.$rrow['contact_id'].'" href="#">edit</a> 
        /
        <a class="delcontact" id="del_'.$rrow['contact_id'].'" href="#">del</a> 
        <div id="editThisContact_'.$rrow['contact_id'].'" style="display:none"> 
         <form name="editForm" onsubmit="return false;"> 
          <p class="instructions">Edit contact information:</p> 
          First Name:<span style="padding:0 20px;">Last Name:</span><br /> 
          <input type="hidden" id="fn_'.$rrow['contact_id'].'" value="'.$rrow['first_name'].'"> 
          <input type="hidden" id="ln_'.$rrow['contact_id'].'" value="'.$rrow['last_name'].'"> 
          Email:<span style="padding:0 20px;">Cell Phone:</span><br /> 
          <input type="hidden" id="em_'.$rrow['contact_id'].'" value="'.$rrow['email1'].'"> 
          <input type="hidden" id="cp_'.$rrow['contact_id'].'" value="'.$rrow['cell_phone'].'"> 
         </form> 
        </div> 
       </td> 
      </tr> 
     '; 
    } 

    $r .= '</table>'; 
    return $r; 
} 

jQuery를 - document.click 이벤트 - 삽입 된 코드가없는 경우, 어떻게 선택기를 찾을 수있다?

$(document).on('click', '.editcontact', function(event) { 
    var contact_id = this.id.split('edit_')[1]; 
    var etc = $('#editThisContact_' + contact_id); 
    etc.dialog("open"); 
}); 

UPDATE - 부분적인 해결책 :

대화가 지금 나타나고있다 - 취소 버튼을은 this post 당, 장소에서였다. 그러나 주입 된 코드는 사라졌습니다. 아무 것도 바뀌지 않았습니다. 취소 버튼을 배치 할 때 구문 오류를 수정하여 대화 코드를 작동 시켰습니다. 및 필드 레이블 텍스트 "에 대한 편집 연락처 정보"에서 오는 - 대화 코드 앞에 주입 마크 업의


스크린 샷 대화없는 입력 필드의 injected markup before dialog code worked http://bluecoonmedia.com/so_query.jpg


스크린 샷을했다?injected markup after dialog code working http://bluecoonmedia.com/so_query_new.jpg

+0

제안 : 대화 상자가 여러 개 없어야합니다. 하나의 JSON 객체 배열에 모든 데이터를 저장하십시오. 이 양식을 사용하여 양식을 작성하고 테이블을 그릴 수 있습니다 (필요에 따라 다름). –

+0

어떻게 생겼습니까? 온라인 예제 나 튜토리얼을 가르쳐 주시겠습니까? 아직 JSON obj 배열로 작업하지 않았으므로 개념적으로 솔루션을 구상 할 수 없습니다. – gibberish

답변

1

원래 게시물에 대한 내 의견에 대한 질문에 대답 : JSON을 실제로 알고 있습니다. JavaScript Object Notation의 약자입니다. JSON 객체입니다 :

{"a":1,"b":2,"c":3} 

잘 알고 계시나요? JSON은 오랫동안 사용해온 것 (100 % 사실이 아닐 수도 있지만 내가 본 것을 보았습니다.)의 멋진 이름입니다.

아이디어는 서버가 JSON 객체를 되돌려 보내고 귀하의 자바 스크립트를 작성/그들을 기반으로 HTML을 업데이 트하십시오. 시나리오에서는 PHP가 여러 개의 HTML 대화 상자를 빌드하도록하고있었습니다. 서버에서 .getJSON(), jQuery를가하고자 사용하도록 요청할 것 인 경우에

{ 
    "records": 
    [ 
    { 
     "field a":"value a", 
     "field b":"value b" 
    }, 
    // record 2 
    { 
     "field a":"value a", 
     "field b":"value b" 
    } 
    ] 
} 

: 대신, 객체 그래서 같은 테이블에서 단일 행을 나타내는 각각의 배열을 다시 전달하여 PHP있을 것입니다 자동으로 읽고 객체의 배열 인 .records 속성을 가진 객체를 제공합니다! 이제 JavaScript를 사용하여 해당 레코드 중 하나를 클릭 할 때 화면의 단일 대화 상자/양식을 업데이트 할 수 있습니다.

참고 : PHP에서 객체 배열을 되돌릴 수는 있지만 위의 객체로 감싸는 것이 가장 좋습니다. 여러 번 당신은 다른 정보도 원할 것입니다. 예를 들어 페이지 매김 된 검색 결과를 할 때 총 레코드 수와 현재 어떤 페이지인지 그리고 다른 데이터 포인트를 알아야 할 때입니다.

이 장점은 서버가 훨씬 빠르게 수행된다는 것입니다. 모든 디스플레이 로직을 클라이언트의 컴퓨터로 전송하므로 동일한 서버에서 더 많은 페이지를 서버에 배치 할 수 있습니다.

정말 간단한 설명입니다. 웹 전체에 자습서와 예제가 있습니다. 온라인에서 사용하는 훌륭한 Ajax 앱 (예 : GMail)은 방대한 HTML 블록을 전달하는 대신 JSON 객체를 사용합니다. 더 여기에 몇 가지 링크가 있습니다, 구글이 적지 :

이 과정에서 도움이되는 훌륭한 프레임 워크가 있습니다. 나는 backbone.jsspine.js의 거대한 팬이다. 둘 다 jQuery를 사용하여 MVC와 같은 앱을 빌드 할 때 모범 사례를 사용할 수 있습니다.

+0

Thom, 유익한 답변에 감사드립니다. 매우 명확하게 설명되어 있습니다. – gibberish

0

당신이 당신의 자신의 질문을 해결할 때이 좋다 작업 대화 코드 후 주입 마크 업의 dialog missing input fields http://bluecoonmedia.com/so_query_dlg.jpg


스크린 샷 - (모든 주입 마크 업 누락을 다음 스크린 샷 참조). 대답이 ID-ten-T 오류 일 때 좋지 않습니다.

삽입 된 HTML에서 입력 필드 (화면 1)의 유형을 확인하십시오. 형식을 type = "text"으로 변경하면 원하는대로 작동합니다.

개념이 새로울 때 Occam의 Razor는 거의 도달 범위를 벗어납니다.

나는 아직도 주입 된 마크 업을 볼 수없는 이유를 모르겠다. ..!

관련 문제