2017-11-30 11 views
0

私はERP Dolibarrのためにやっている開発者の支援が必要です。 ERPでは、新しいオファー(古典的なフォーム)を作成することができます。このフォームでは、得意先名、得意先コード、支払モードなどを定義することができます。すでに入力した別のオファーからエクスポートする情報を入力に「自動的に」入力する必要があります。たとえば、私のオファー1が顧客としてTOTOを持っている場合、オファー1を選択してから顧客名を選択し、新しいオファーの入力を検証するときに値 "トート"を入力します。AJAX関数はselect2-drop-mask要素では機能しません

その私が使用した目的やAjaxの機能について:

$('#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> 

EDITここ

は、私は私のデータを取得するためにやってるdiferentステップでありますDolibarr実現される機能と私のオファーのリストを取得:

ページcard.php:

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

その後、私は$ 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ページを呼び出します。このページでは、データベースへの要素の名前と入力名の間の連想配列を作成しました。成功した場合、ajax関数に入力した名前( "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 "]}"; 

、私は特定の選択と1以外のすべてのための良好な値(上記のHTMLを参照)で、私の入力を埋める意味。

+0

申し訳ありませんが、あなたの目標は何か、何が問題になるのか理解できません...コンソールに正しい値を記録していますか?データには何が含まれていますか?あなたはSELECTの場合、どの要素にも割り当てられていないことに気がつきましたか?また、HTMLを複数行にわたって適切にフォーマットできますか? –

+0

@Lilyあなたはそれが動作していないことをどのように知っていますか? < - おそらく、その質問に対する答えはあなたの投稿に含めるべきです...単に「それはうまくいかない」と誰かを助けていないと言っていますか?選択**のどの部分が**特に機能していないのですか? – ProEvilz

+0

申し訳ありませんが、選択したコードが不足しているため編集しました。私のコピーはこの部分では機能しませんでした。 @ProEvilz:「機能しない」とは、上記のHTMLを入れたものを除いて、すべての入力を満たすことができるということです。私のすべての入力/選択とテキスターは機能します(私がエクスポートしたい情報は良い入力で充分に満たされています)が、これは何も起こりません。それは特別な選択だからだと思われる。私はそれがもっとはっきりしていることを願っています... – Lily

答えて

-1

したがって、私が理解したところでは、ajaxは別の順序に関連するデータを返します。あなたの目標は、現在のフォームのさまざまな入力にこのデータを挿入することです - 選択は機能していません...

これが当てはまる場合、最初に強調したいのは、case "SELECT"です割り当てをやっておらず、ロギングだけ!他のケースのステートメントでは、あなたは...

+0

申し訳ありませんが私は自分のコードを編集した悪いコピーでした。 – Lily

+0

これは**コメント**であり、そのまま掲載されます。これは、問題に対する答えまたは解決策ではありません。 – ProEvilz

+0

「入力割り当てを追加する」は答えではないことを私に伝えていますか? OPが彼のコードのすべてを書いていない場合は、私のせいではありません:) –

-1

ajax呼び出しから得られるデータに何をするかを少しずつ説明するとよいでしょう。あなたが書かれているものから私はあなたがこれをしたいと思う:AJAX呼び出しから

  1. データあなたはいけない選択要素を取得すると、すでにフォーム上に存在しており、ユニークな名前
  2. を持つ入力フィールドに移入する必要があります選択した2つのクラスに値を設定するだけで、現在選択されている要素をクリアし、その中のすべてのオプションを配置する必要があります。
  3. すべての選択要素について、その要素にselect2を再度適用する必要があります。この要素は、その要素を初期化して検索などを許可します。

あなたのajaxでhtmlを取得しているのであれば、ピックセルの値とその名前だけを使用する方が良いでしょう。

+0

@ProEvilz ajax呼び出しはすでに完了しています。select2は既に適用可能です。私はこれらの手順は単なるコメントだとは思わない。あなたがそれらに従って、OPによって投稿されたコードを使用する場合、解決策はそこにあります。その一般化ではなく、コメントは "あなたの入力にselect2ライブラリを適用する"上記の答えであり、OPはそれらに利用可能なすべての正しいコードを持っているので、コードを含む必要はありません。 –

+0

@ Farrukh Subhani、あなたの答えに感謝します。私は自分の投稿を編集し、私が従う手順をあなたに教えてくれました。私はあなたの解決策を得ていませんでした、より明示的にお願いしますか? – Lily

+0

あなたはajaxを構築するまで、ステップアップしたアップデートのために@Lilyありがとうございます。次に、ページに表示されるajaxレスポンスを貼り付けることができますか、ページ上のそのAjaxレスポンスを使って何をしますか?サーバーからオプションを取得すると、htmlでそれらを見ることができます。あなたの質問にそれを貼り付けることができれば。 ajaxリクエストの終了時にオプションが設定された後、その要素にselect2を再適用する必要があります。 –