Ajax函数不适用于select2-drop-mask元素

时间:2017-11-30 16:14:40

标签: javascript jquery ajax erp

我需要你帮助我为ERP Dolibarr做一个开发。 在ERP中,您可以创建新的报价(使用经典表单)。在此表单中,您可以定义客户名称,客户参考,付款方式等...我需要自动填写"#34;那些带有我从另一个已创建的商品中导出的信息的输入。例如,如果我的报价1有TOTO作为客户,我可以选择报价1,然后是客户名称,当我验证我的新报价中的输入时,会填充值" Toto"。

为此,我使用了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:

<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>

修改

以下是我为获取数据而采取的不同步骤: 首先,在我的页面card.php上,我获得了Dolibarr实现的功能列表:

Page card.php:

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

然后我在优惠中添加一行,根据我的优惠列表&gt;添加从不同优惠中选择信息的可能性。 $ listPropal:

Page 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">';

我的ajax函数调用propal.php页面,我在其中将我的元素名称之间的关联数组放入数据库和输入名称,并且我在成功的情况下发送到我的ajax函数名称我的输入(&#34; nameElt \&#34;:\&#34; {$ array [$ propalOption]} \&#34;),我输入的属性(\&#34; {$ propalOption} \&#34;,\&#34;值\&#34;)及其值(&#34;值\&#34;:\&#34; {$ list_propal [0] [$ propalOption]} \ &#34)

页面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)。

2 个答案:

答案 0 :(得分:-1)

因此,根据我的理解,ajax返回相对于另一个订单的数据。您的目标是将此数据插入当前表单中的各种输入中 - 但选择不起作用...

如果是这种情况,我要强调的第一件事是case "SELECT"你没有做任何任务,只记录!在另一个案例陈述中,你是......

答案 1 :(得分:-1)

如果您对从ajax调用获得的数据所做的更详细一点,那将是一件好事。根据你所写的内容,我认为你想这样做:

  1. 来自ajax调用的数据需要填写在表单上已存在且具有唯一名称的输入字段中
  2. 当您获得选择元素时,您不需要填充选择2个类,只需清除当前的选择元素并将所有选项放在其中。
  3. 对于所有选择元素,您需要再次将select2应用于该元素,该元素将初始化它并允许搜索等。
  4. 如果你在ajax中为select 2获取html,最好只提取li值及其名称或使用value作为名称来创建新的select。