2017-11-30 14 views
0

ERP Dolibarr에서 수행중인 개발과 관련하여 도움이 필요합니다. ERP에서 새 제안을 만들 수 있습니다 (클래식 양식 사용). 이 양식에서 고객 이름, 고객 조회, 지불 모드 등을 정의 할 수 있습니다. 이미 작성된 다른 제안에서 내 보낸 정보로 해당 입력을 "자동으로"채울 필요가 있습니다. 예를 들어, 내 오퍼 1에 TOTO가 고객으로있는 경우 오퍼 1을 선택한 다음 고객 이름을 선택할 수 있으며 새 오퍼의 입력을 확인할 때 "토토"값이 채워집니다. 그 내가 사용했던 목적과 아약스 함수의 AJAX 함수가 select2-drop-mask 요소와 함께 작동하지 않습니다.

:

$('#exportToNewPropal').on('click', function() { 
    //alert("j'ai cliqué sur le bouton !"); 
    $.ajax({ 
     dataType: "json", 
     url: 'propal.php', 
     type: 'GET', 
     data: "propalId=" + $('#propalSource').val() + "&propalOption=" + $('#propalOption').val(), 

     success: function (data) { 
      $.each(data.table, function (index, value) { 
       var valueName = value.nameElt; 
       switch ($("[Name=" + valueName + "]").prop('tagName')) { 
        case "SELECT": 
         console.log("c'est un select"); 
         console.log("Le name de l'input select est " + valueName); 
         console.log("La valeur de l'input select est " + value.value); 
$('select[Name=' + valueName + ']').val(value.value); 
         break; 
        case "TEXTAREA": 
         console.log("c'est un textarea"); 
         console.log("Le name de l'input est " + valueName); 
         console.log("La valeur de l'input est " + value.value); 
         $('textarea[Name=' + valueName + ']').val(value.value); 
         break; 
        default: 
         console.log("c'est un input"); 
         console.log("Le name de l'input est " + valueName); 
         console.log("La valeur de l'input est " + value.value); 
         $('input[Name=' + valueName + ']').val(value.value); 
         break; 
       } 

      }); 
     } 
    }) 
}); 

내 문제는 내가 정보를 입력해야하는 입력 중 하나가 당신이 검색을 할 수있는 선택이며, 그 하나이다 내 코드 만 작동하지 않습니다. 여기

은 ERP에서 HTML의 : 난, 내 페이지 card.php에 첫째 :

<div class="select2-drop select2-display-none select2-with-searchbox select2-drop-active" style="left: 512.5px; width: 100px; top: 254.438px; bottom: auto; display: block;" id="select2-drop"> 
<div class="select2-search">  
<label for="s2id_autogen1_search" class="select2-offscreen"></label>  <input type="text" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" class="select2-input" role="combobox" aria-expanded="true" aria-autocomplete="list" aria-owns="select2-results-1" id="s2id_autogen1_search" placeholder="" aria-activedescendant="select2-result-label-24"> 
</div> 
<ul class="select2-results" role="listbox" id="select2-results-1"> 
<li class="select2-results-dept-0 select2-result select2-result-selectable select2-highlighted" role="presentation"> 
<div class="select2-result-label" id="select2-result-label-24" role="option"><span class="select2-match"></span></div></li> 
<li class="select2-results-dept-0 select2-result select2-result-selectable" role="presentation"> 
<div class="select2-result-label" id="select2-result-label-25" role="option"><span class="select2-match"></span>TEST</div></li> 
<li class="select2-results-dept-0 select2-result select2-result-selectable" role="presentation"> 
<div class="select2-result-label" id="select2-result-label-26" role="option"><span class="select2-match"></span>TIERS1</div></li> 
<li class="select2-results-dept-0 select2-result select2-result-selectable" role="presentation"> 
<div class="select2-result-label" id="select2-result-label-27" role="option"><span class="select2-match"></span>TIERS2</div></li> 
<li class="select2-results-dept-0 select2-result select2-result-selectable" role="presentation"><div class="select2-result-label" id="select2-result-label-28" role="option"><span class="select2-match"></span>TIERS3</div></li></ul></div> 

편집 여기

내가 내 데이터를 얻을하고있어 개의 다른 단계이다 Dolibarr 구현 기능을 내 이벤트의 목록을 받고 :

페이지 card.php :

$list = $object->liste_array(); 
    function func($x){ 
     return $x; 
    } 
    $listPropal = array_map(func, $list); 
,691,363 (210)

가 그럼 난 이벤트의 내 ​​목록에 따라, 다른 제안에서 정보를 선택의 가능성을 추가하는 제안에 줄을 추가> $ listPropal :

페이지 card.php :

print '<tr><td>Proposition source</td><td colspan="2"><select name="propalSource" id="propalSource">'; 
    print '<option value="0" selected>&nbsp;</option>'; 
    foreach($listPropal as $elements){ 
     print '<option value="' . $elements['id']. '">' . $elements['ref'] . '</option>'; 
    } 
    print '</select>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<select 

name="propalOption" id="propalOption"> 
    <option value="0">&nbsp</option> 
    <option value="ref_client">Référence client</option> 
    <option value="fk_soc">Tiers</option> 
    <option value="fin_validite">Durée de validité</option> 
    <option value="fk_cond_reglement">Conditions de règlement</option> 
    <option value="fk_mode_reglement">Mode de règlement</option> 
    <option value="fk_input_reason">Origine</option> 
    <option value="fk_availability">Délai de livraison</option> 
    <option value="fk_shipping_method">Méthode d’expédition</option> 
    <option value="date_livraison">Date de livraison</option> 
    <option value="note_public">Note publique</option> 
    <option value="note_private">Note privée</option> 
    <option value="type_presta">Type de prestation</option> 
    <option value="agence">Agence</option> 
    <option value="margin_rate_service">Taux de marge service</option> 
    <option value="margin_rate_product">Taux de marge produit</option> 
    </select>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input id="exportToNewPropal" type="button" class="button" value="Valider">'; 

내 아약스 함수는 propal.php 페이지를 호출합니다.이 페이지에서 데이터베이스에 대한 요소 이름과 입력 이름 사이의 연관 배열을 만들었고, 성공한 경우에는 내 입력 ("nameElt \ ": \"{$ array [$ propalOption]} \ "), 내 입력 (\"{$ propalOption} \ ", \"value \ ") 및 그 값 ("value \ ": \"{$ list_propal [0] [$ propalOption]} \ ").

페이지 propal.php :이 코드가 작동

$propalId = GETPOST('propalId'); 
$propalOption = GETPOST('propalOption'); 

$list_propal = $propalSource->liste_propal($propalId); 

//Tableau associatif: nom dans la base de données => name de l'input 
$array = array(
    'ref_client' => 'ref_client' , 
    'fk_soc' => 'socid', 
    'fin_validite' => 'duree_validite', 
    'fk_cond_reglement' => 'cond_reglement_id', 
    'fk_mode_reglement' => 'mode_reglement_id', 
    'fk_availability' => 'availability_id', 
    'fk_shipping_method' => 'shipping_method_id', 
    'date_livraison' => 'date_livraison', 
    'note_public' => 'note_public', 
    'note_private' => 'note_private', 
    'fk_input_reason' => 'demand_reason_id', 
    'margin_rate_service' => 'margin_rate_service', 
    'margin_rate_product' => 'margin_rate_product' 
); 
    // IF SUCCESS SEND TO AJAX: 
    echo "{ \"table\": ["; 
    if (array_key_exists($propalOption, $list_propal[0])){ 
     echo "{ \"nameElt\":\"{$array[$propalOption]}\",\"attribute\": \"{$propalOption}\", \"value\" : \"{$list_propal[0][$propalOption]}\" }"; 
    } else { 
     echo "{\"correspondance liste option\":aucune}"; 
    } 
    echo "]}"; 

, 내가 특정 선택과를 제외한 모든 좋은 값 (위의 HTML 참조) 내 입력을 채울 것을 의미한다.

+0

죄송합니다. 귀하의 목표가 무엇인지, 무엇이 잘못되었는지 이해할 수 없습니다. 올바른 값을 콘솔에 로그인 했습니까? 데이터에는 무엇이 들어 있습니까? SELECT 경우에는 어떤 요소에 대한 지정이 없다는 것을 알고 있습니까? 또한 HTML을 여러 줄로 올바르게 포맷 할 수 있습니까? –

+0

@ 릴리 어떻게 작동하지 않는지 어떻게 알 수 있습니까 ?? <- 아마도 그 질문에 대한 대답은 당신의 게시물에 포함되어야합니다 ... 단순히 '그것이 효과가 없다'는 말은 누구에게 도움이되지 않는다는 것입니다, 그렇습니까? 선택 **의 어느 부분이 ** 작동하지 않는가? – ProEvilz

+0

죄송합니다. select의 누락 된 코드를 편집했습니다.이 부분에 대한 사본이 작동하지 않았습니다. @ProEvilz : "작동하지 않는다"는 것은 위의 HTML을 제외한 모든 입력을 채울 수 있음을 의미합니다. 모든 입력/선택 및 테스크 테라 (texteras)가 작동합니다 (좋은 정보로 내보내기를 원하는 정보가 잘 채워집니다).하지만이 경우 아무 일도 없었습니다. 그것은 특별한 선택이기 때문입니다. 이제는 훨씬 더 명확 해지기를 희망합니다 ... – Lily

답변

-1

그래서 아약스가 다른 순서와 관련된 데이터를 반환한다는 것을 이해했습니다. 귀하의 목표는 현재 양식의 다양한 입력에이 데이터를 삽입하는 것입니다. 그러나 선택이 작동하지 않습니다 ...

가장 먼저 강조하고자하는 것은 case "SELECT"입니다. 어떤 과제도하지 않고 그냥 로깅! 다른 사례 문장에서는 ...

+0

죄송합니다. 내 코드를 편집 한 나쁜 사본이었습니다. – Lily

+0

이것은 ** 의견 **이며 그냥 게시되어야합니다. 이것은 문제의 해답이 아닙니다. – ProEvilz

+0

그래서 "입력 과제 추가"가 답이 아니라고 말하고 있습니까? OP가 자신의 코드를 모두 작성하지 않은 경우 내 잘못이 아닙니다 :) –

-1

아약스 호출에서 얻은 데이터에 대해 수행 할 작업을 단계별로 설명하는 것이 좋습니다.당신은 당신이하고 싶은 생각 무엇을 쓸 사람 : 아약스 호출에서

  1. 데이터가 이미 양식에 존재하고 고유 한 이름을 입력 필드에 채워 필요를
  2. 당신은 당신이 그나마 선택 요소를 얻을 때 선택 2 클래스를 채우고 현재 선택 요소를 지우고 모든 옵션을 그 안에 배치해야합니다.
  3. 모든 선택 요소에 대해 select2를 다시 초기화하여 해당 요소를 초기화하고 검색 등을 허용해야합니다.

아약스에서 선택 2에 대한 html을 얻는 경우 픽업 li 값과 해당 이름을 사용하거나 값을 이름으로 사용하여 새 선택을 만드는 것이 좋습니다.

+0

@ProEvilz ajax 호출이 이미 완료되었습니다. select2는 이미 적용 가능합니다. 나는이 단계가 단지 의견이라고 생각하지 않는다. 당신이 그들을 따르고 OP에 의해 게시 된 코드를 사용한다면 해결책은 거기에 있습니다. 일반화가 아니라 주석은 "여러분의 입력에 select2 라이브러리를 적용합니다"라고 대답했습니다. OP가 올바른 코드를 모두 가지고 있기 때문에 코드는 포함 할 필요가 없습니다. –

+0

@ Farrukh Subhani, 답변 해 주셔서 감사합니다. 나는 내 게시물을 편집하고 내가 따라야 할 단계를 알려주었습니다. 나는 당신의 솔루션을 얻지 못했습니다. – Lily

+0

@Lily 당신이 아약스를 구축 할 때까지 단계별로 업데이트 해 주셔서 감사합니다. 페이지에 표시되는 아약스 응답을 붙여넣고 페이지에서 아약스 응답으로 무엇을 할 수 있습니까? 서버에서 옵션을 얻으면 html로 볼 수 있습니다. 그런 다음 질문에 붙여 넣을 수 있습니다. ajax 요청 완료시 옵션이 채워진 후에 해당 요소에서 select2를 다시 적용해야합니다. –