как передать массив из php в javascript

SaM1001

Новичок
да нет, всё другое отдаёт на ура,

Код:
var fArtMg = $("<input id=\"ref\" type=\"text\" name=\"ref\" size=\"6\" class=\"ui-autocomplete-input\" value=\"'.$selected.'\"/>&nbsp;/&nbsp;");
var fieldWrapper = $("<div class=\"fieldwrapper\" id=\"field" + intId + "\"/>");
только вот это место закрывает. А вот почему не врублюсь ни разу
 

SaM1001

Новичок
Всё остальное отдаёт простой html и чуток яваскрипта, а данной строке надо выполнить php код. Это я уже пробовал, если убираю <?php ?> то не обрабатывается яваскирпт, который должен мне добавить ещё одно поле с генерированное php

Есть ещё какие идеи?
 

Вурдалак

Продвинутый новичок
SaM1001, ну, как бэ, твой файл — это не PHP файл, с чего бы там ему выполняться? Очевидно, что это какой-то шаблонизатор.
 

SaM1001

Новичок
да нет, самый нормальный .php-файл. Просто не пойму почему у меня закрывается в комент $formarticle... и посмотреть где не знаю...
Вот весь кусок яваскрипта
Код:
//Add new Field2form
    print "\n".'<script type="text/javascript">';   
    print '$(document).ready(function() {
          $("#add").click(function() {
          var intId = $("#buildyourform div").length + 1;
          var fieldWrapper = $("<div class=\"fieldwrapper\" id=\"field" + intId + "\"/>");
         
        var fArtNr = $("<?php print $formarticle->select_article($object->art_nr,\'ref\',array(\'selectarnr_id\',\'state_id\'),6);?> &nbsp;/&nbsp;");
         
        var fAmount = $("&nbsp;/&nbsp;<input type=\"text\" size\"10\" id=\"stok\" name=\"stok\" size=\"10\" value=\"'.GETPOST('stok').'\"/>");
          var removeButton = $("<input type=\"button\" class=\"remove\" value=\"-\" />");
          removeButton.click(function() {
              $(this).parent().remove();
          });
          fieldWrapper.append(fArtNr);
        fieldWrapper.append(fAmount);
          fieldWrapper.append(removeButton);
          $("#buildyourform").append(fieldWrapper);
      });
      $("#preview").click(function() {
          $("#yourform").remove();
          var fieldSet = $("<fieldset id=\"yourform\"><legend>Your Form</legend></fieldset>");
          $("#buildyourform div").each(function() {
              var id = "input" + $(this).attr("id").replace("field","");
              var label = $("<label for=\"" + id + "\">" + $(this).find("input.fieldname").first().val() + "</label>");
              var input;
              fieldSet.append(label);
              fieldSet.append(input);
          });
          $("body").append(fieldSet);
          });
      });';
А вот тут он должен добавлять мне ещё дополнительные поля:
PHP:
print '<tr><td>'.$langs->trans('Article').'&nbsp;/&nbsp;'.$langs->trans("Stock").'</td><td colspan="3">';
    print '<fieldset id="buildyourform">';
    print $formarticle->select_article($object->art_nr,'ref',array('selectarnr_id','state_id'),6);
    print '&nbsp;/&nbsp;<input type="text" id="stok" name="stok" size="10" value="'.GETPOST('stok').'">';
    print '</fieldset>';
    print '<input type="button" value="Add Artcle" class="add" id="add" />';
    print '</td></tr>';
Может так нагляднее будет?!
 

WMix

герр M:)ller
Партнер клуба
самый нормальный .php-файл начинается или имеет '<?php' или любую другую сокращенную версию этого тега. такое имеется в твоем "самом нормальном"
PHP:
<!--? $formarticle--->
select_article($object-&gt;art_nr,'ref',array('selectarnr_id','state_id'),6); ?>;
или этот кусок из файрбага (подредактированный браузером) на отключенном php
 

SaM1001

Новичок
Да, файл имеет это расширение и начинается <?php и заканчиваеться ?>. В другом форуме написали что что-то не то с эскейпами

php отрабатываеться, эта же строка один раз выше содаёт мне инпут. если я её через яваскрипт хочу дублировать, чтобы получить ещё один инпут
Код:
$formarticle
закрываеться в комент. В чём проблема не пойму

ЗЫ: действительно это из под F12 в хроме, но пхп работает, другие методы отрабатываются то нормально
 
Последнее редактирование:

WMix

герр M:)ller
Партнер клуба
PHP:
<?php print 'куча говнокода <?php print продолжение говнокода'
вот твоя ошибка!
и этот кусок (подредактированный браузером) смотри соурс иначе не знаю откуда комментарии взялись. php сам по себе их не пишет
 

SaM1001

Новичок
В исходном коде я этой строчи совсем не вижу
Код:
<!--? $formarticle--->
select_article($object-&gt;art_nr,'ref',array('selectarnr_id','state_id'),6); ?>;
Тогда вопрос по другому: как мне через JS передать правильно вот эту строку:
Код:
print $formarticle->select_article($object->art_nr,\'ref\',array(\'selectarnr_id\',\'state_id\'),6);
 

SaM1001

Новичок
Всем ещё раз здрасти, надо было ночь переспать чтобы хоть чуток разобраться. Думаю я понял в чём проблема, я хочу php-код выполнить уже в браузере, что никогда работать не будет... кажется правильно изложил. Так вот теперь сразу возникает другой вопрос, как мне его "аккуратно" послать на сервак и "вернуть" уже готовый инпут который лежит под $formarticle->select_article?
 

WMix

герр M:)ller
Партнер клуба
начни с самого начала.
как мне его "аккуратно" послать на сервак
кого/что послать? зачем посылать (что изменилось)?
что лежит под $formarticle->select_article?
 

SaM1001

Новичок
Короче первый раз как страница грузится у меня вот этот кусок кода
PHP:
print $formarticle->select_article($object->art_nr,'ref',array('selectarnr_id','state_id'),6);
отдаёт вот так:
HTML:
<filedset type="buildyouform">
<script type="text/javascript">
    $(function() {
            $("#ref").combobox({
                    minLengthToAutocomplete : 2,
                    selected : function(event,ui) {
                            var obj = [];
                            $.each(obj, function(key,values) {
                                    if (values.method.length) {
                                            getMethod(values);
                                    }
                                });
                        }
                });

                function getMethod(obj) {
                        var id = $("#ref").val();
                        var method = obj.method;
                        var url = obj.url;
                        var htmlname = obj.htmlname;
                    $.getJSON(url,
                                        {
                                                action: method,
                                                id: id,
                                                htmlname: htmlname
                                        },
                                        function(response) {
                                                $.each(obj.params, function(key,action) {
                                                        if (key.length) {
                                                                var num = response.num;
                                                                if (num > 0) {
                                                                        $("#" + key).removeAttr(action);
                                                                } else {
                                                                        $("#" + key).attr(action, action);
                                                                }
                                                        }
                                                });
                                                $("select#" + htmlname).html(response.value);
                                        });
                }
        });</script>
<select id="ref" class="flat" name="ref" style="display: none;">
<option value="-1"></option>
<option value="1337">10040 - HKV 48 Vorderschirm ART_000046 10040</option>
// тут ещё до хрена строчек
<option value="2409">10111067 - HWZ M-NRK Qn10 30° 100l/i BR 423 ART_001118 10111067</option>
</select><input class="ui-autocomplete-input ui-widget ui-widget-content ui-corner-left dolibarrcombobox" autocomplete="off">
<button type="button" tabindex="-1" title="Show All Items" class="ui-button ui-widget ui-state-default ui-button-icon-only ui-corner-right ui-button-icon" role="button" aria-disabled="false">
<span class="ui-button-icon-primary ui-icon ui-icon-triangle-1-s"></span>
<span class="ui-button-text">&nbsp;</span></button>
<span role="status" aria-live="polite" class="ui-helper-hidden-accessible"></span>
&nbsp;/&nbsp;
<input type="text" id="stok" name="stok" size="10" value="">
</filedset>
<input type="button" value="Weterer Artikel" class="add" id="add">
Теперь всё вот это надо засунуть в текстовую переменную, дать id и обратится к полю по id вот тут:

Код:
var fArtNr = $(...);
 

WMix

герр M:)ller
Партнер клуба
выкинь эту кучу букв, оставь только проблему. попытайся ответить на вопрос, а не генерить новый.
и это, плиз поменяй аватюру, стремно страничку открывать.

Теперь всё вот это надо засунуть в текстовую переменную, дать id и обратится к полю по id вот тут:
сделай.. что сложного то?
 

SaM1001

Новичок
В этом вся и сложность, не могу зацепить
Код:
<div class="fieldwrapper" id="field1">
тут дохера всякой всячины которое делает $formarticle->select_article($object->art_nr,\'ref\',array(\'selectarnr_id\',\'state_id\'),6);
</div>
чтобы
Код:
var fArtNr = $(...);
создавал мне ещё один аналогичный див и присваивал ему id="field2"

Есть идея как это можно решить? Потому это для меня и сложность, что у самого не получаеться

ЗЫ: Аву сменил...
 

WMix

герр M:)ller
Партнер клуба
если написать
PHP:
print $formarticle->select_article($object->art_nr,'ref',array('selectarnr_id','state_id'),6);
2 раза друг за другом, получится симантически правильный html?
 

fixxxer

К.О.
Партнер клуба
SaM1001, на твоем примере черт ногу сломит. Либо генерируй html целиком на клиенте, либо целиком на сервере - а не извращайся с починкой двигателя на ходу через выхлопную трубу.
 

SaM1001

Новичок
Ребят, всем здрасти и хороших выходных. Мне они не сулят, парюсь третий день подряд и не могу сделать нужную фишку.
Короче у меня есть кусок jQuery который доблирует мои инпуты:
Код:
<script type="text/javascript">
  var cnt = 2
       $(document).ready(function(){
        // Add new row
        $(\'.add\').click(function(event){
        event.preventDefault();
        var line = $(\'#field1\').html();
       var expr = /del[0-9]+/;
       var newline = line.replace(expr, \'del\'+cnt);
  $(\'#buildyourform\').append(\'<div class="fieldwrapper" id="field\'+cnt+\'">\'+newline+\'<div>\');
  cnt++;
  });
  });

  // Delete row
  function deleteRow(btn_id){
  var del_id = btn_id.split(\'\');
  $(\'#filed\'+del_id[1]).remove();
  };';  
  </script>
Вот этот код пыхи генерирует мне форму куда я вбиваю данные:

Код:
print '<tr><td>'.$langs->trans('Article').'&nbsp;/&nbsp;'.$langs->trans("Stock").'</td><td colspan="3">';
   print '<fieldset id="buildyourform">';
   print '<div class="fieldwrapper" id="field1"/>';
   print $formarticle->select_article($object->art_nr,'ref',array('selectarnr_id','state_id'),6);
   print '<input type="text" id="stok" name="stock" size="10" value="'.GETPOST('stock').'">';
   print '</div />';
   print '</fieldset>';
   print '<input type="button" value="Add Article" class="add" id="add" />&nbsp;&nbsp;<input type="button" value="Delete" class="del" id="del" onclick="deleteRow(this.id); return false; /">';
   print '</td></tr>';
На выходе исходный код страницы выглядит вот так:

Код:
<td colspan="3">
<fieldset id="buildyourform"><div class="fieldwrapper" id="field1"/>
<script type="text/javascript">
  $(function() {
  $("#ref").combobox({
  minLengthToAutocomplete : 2,
  selected : function(event,ui) {
  var obj = [];
  $.each(obj, function(key,values) {
  if (values.method.length) {
  getMethod(values);
  }
  });
  }
  });

  function getMethod(obj) {
  var id = $("#ref").val();
  var method = obj.method;
  var url = obj.url;
  var htmlname = obj.htmlname;
  $.getJSON(url,
  {
  action: method,
  id: id,
  htmlname: htmlname
  },
  function(response) {
  $.each(obj.params, function(key,action) {
  if (key.length) {
  var num = response.num;
  if (num > 0) {
  $("#" + key).removeAttr(action);
  } else {
  $("#" + key).attr(action, action);
  }
  }
  });
  $("select#" + htmlname).html(response.value);
  });
  }
  });</script>
<select id="ref" class="flat" name="ref">
<option value="-1"></option>
<option value="2396">9984380 - Article Highrecomedly ART_001105 9984380</option>
тут ещё дофига строчек материала...
<option value="2402">9984895 - Funksystem data (Heinze) ART_001111 9984895</option>
</select>
<input type="text" id="stok" name="stock" size="10" value="">
</div />
</fieldset>
<input type="button" value="Add Article" class="add" id="add" />&nbsp;&nbsp;
<input type="button" value="Delete" class="del" id="del" onclick="deleteRow(this.id); return false; /">
</td>
И всё вроде работает на ура. Берёт fieldset и копирует мне его один к одному. Всё как задуманно. Есдинственное не перенимается Autocomplete... чтобы в следующем инпуте выбор происходил после второго знака. Есть варианты передать "зацепить" эту функцию по другому как-то?
 

WMix

герр M:)ller
Партнер клуба
Попробуй создать все тоже самое но только без лишних полей, и без php. Упрости сам для себя, оставив только динамически создаваемые autocomplete. это решит сразу 2 проблемы: будет проще решить самому и будет проще помочь со стороны.
 
Сверху