Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/417.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Ajax函数不适用于select2 drop mask元素_Javascript_Jquery_Ajax_Erp - Fatal编程技术网

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

Javascript Ajax函数不适用于select2 drop mask元素,javascript,jquery,ajax,erp,Javascript,Jquery,Ajax,Erp,我需要你的帮助,关于我为ERP Dolibarr做的开发。 在ERP中,您可以创建具有经典形式的新报价。在此表单中,您可以定义客户名称、客户参考、付款方式等。。。我需要用我从另一个已经创建的报价中导出的信息自动填充这些输入。例如,如果我的报价1中有TOTO作为客户,我可以选择报价1,然后选择客户名称,当我验证新报价中的输入时,用TOTO值填充 为此,我使用了和ajax函数: $('#exportToNewPropal').on('click', function () { //alert

我需要你的帮助,关于我为ERP Dolibarr做的开发。 在ERP中,您可以创建具有经典形式的新报价。在此表单中,您可以定义客户名称、客户参考、付款方式等。。。我需要用我从另一个已经创建的报价中导出的信息自动填充这些输入。例如,如果我的报价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;
                }

            });
        }
    })
});
我的问题是,我必须填写信息的输入之一是一个select,您可以在其中进行搜索,而对于这个输入,只有我的代码不起作用

以下是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>
然后,我在报价中添加一行,根据我的报价列表>$listPropal,添加从其他报价中选择信息的可能性:

Page card.php:

$list = $object->liste_array();
    function func($x){
        return $x;
    }
    $listPropal = array_map(func, $list);
 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">';

这段代码正在运行,这意味着我将输入的所有内容都填入了良好的值,只有带有特定select的除外,请参见上面的html。

因此,据我所知,ajax返回的数据是相对于另一个顺序的。您的目标是将此数据插入到当前表单中的各种输入中-但select不起作用


如果是这样的话,我想强调的第一件事是,如果你不做任何作业,只做日志记录!在另一个案例中,您是…

最好一步一步地解释一下如何处理从ajax调用中获得的数据。根据你所写的,我认为你想这样做:

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

对不起,我不明白您的目标是什么以及出现了什么问题。。。您是否获得登录到console的正确值?数据包含什么?您是否注意到在SELECT案例中,没有任何元素的赋值?另外,你能在多行上正确格式化HTML吗?@Lily你怎么知道它不工作??很抱歉,我编辑了select的缺失代码,我的副本不适用于此部件@Proeviz:我说的不工作是指除了上面的HTML之外,我可以填充我所有的输入。我所有的输入/选择和文本都有效。我想要导出的信息都很好地填入了好的输入中,但是对于这一个,什么都没有发生。这似乎是因为它是一个特殊的选择。我希望它现在更清楚了…我可以填写我所有的输入,除了我在上面放的HTML之外-你怎么知道你不能填写它?你试过了吗?它不允许你点击它吗?当你在里面打字时会发生什么。。文本是否不显示在屏幕上?你是什么意思?到目前为止,我们只知道你有一个select元素不起作用,并且你有一个无法填充的输入。这是一个注释,只是作为注释发布。这不是问题的答案或解决方案。那么你是说添加输入作业不是答案?如果OP没有写所有的代码不是我的错:@FabioLolli不,这是一个非常糟糕的答案。最好作为注释。@Proeviz ajax调用已经完成,select2已经可以应用了。我不认为这些步骤只是评论。如果您遵循这些规则并使用OP发布的代码,那么解决方案就在那里。这不是泛化,注释是在您的输入上应用select2库。以上是一个答案,不必包含代码,因为OP有所有可用的正确代码。@Farrukh Subhani,谢谢您的回答。我已经编辑了我的帖子,并试图给你我遵循的步骤,希望你能更清楚。不过我没有得到你的解决方案,你能说得更清楚一点吗?@Lily感谢你在建立ajax之前分步进行的更新。然后,您可以粘贴在页面上得到的ajax响应,以及如何处理页面上的ajax响应。当您从服务器获取选项时,可以在html中看到它们。如果你能把它贴在你的问题上。在ajax请求完成时,在元素中填充了选项之后,您需要在该元素上重新应用select2。@Farrukh Subhani,很抱歉回答得太晚,但我的客户已经改变了主意,我必须快速满足他的新愿望。我不需要再做我的文章了,但我真的很感谢你的时间和帮助。当我有机会的时候,我会尝试运用你的建议来解决这个问题。
$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 "]}";