2015-03-04 3 views
2

Я пытаюсь отобразить таблицу MySQL в форме формы листа задания, которую я делаю в раскрывающемся списке, показывает детали клиента, а затем после того, как выбранные поля должны быть заполнены на основная форма.Выпадающий список для массива JavaScript для заполнения текстовых полей

Я знаю, что люди склонны использовать AJAX, но это предназначено для использования на планшете, привязанной к мобильному телефону, и вы хотите попросить сервер как можно меньше.

Поскольку у меня уже есть детали из SQL, чтобы отобразить раскрывающийся список, я думал, что смогу использовать это. Я нашел исходный код по адресу:

http://board.phpbuilder.com/showthread.php?10372137-RESOLVED-How-do-I-populate-multiple-text-boxes-from-a-dropdown-(I-can-populate-1-text-box!)

, но я также хочу, чтобы отобразить элементы, которые не в списке. Кто-то сказал, что это работает, но чем больше я узнал, я не мог понять, как из-за того, что массив, который он строит, похоже, не был в формате JavaScript.

У меня есть выпадающий рабочий стол, а также он заполняет массив JavaScript, используя имена, но я просто не могу понять, как использовать массив для отображения в полях.

Это, по-видимому, именованные индексы, используемые в массиве. Я могу получить тестовый массив для отображения, когда я использую обычный статический массив, но я прокомментировал их, но как только я попытаюсь использовать имена в массиве, я получаю неопределенные ошибки.

<html> 
<head> 

<script type="text/javascript"> 




    <?php 

     include_once 'includes/db_connect.php'; 

     $query1 = "SELECT * FROM customer"; 
      $result1 =($mysqli-> query($query1)); 


     // build javascript array building an object 


     // build javascript array 
      while($row=mysqli_fetch_array($result1)){ 
      echo 'customer['.$row['customer_id'].'] = new Array('; 
      echo 'customer['.$row['customer_id'].'][customer_id] = "'.$row['customer_id'].'";'; 
      echo 'customer['.$row['customer_id'].'][post_code] = "'.$row['post_code'].'";'; 
      echo 'customer['.$row['customer_id'].'][company_name] = "'.$row['company_name'].'");'; 
     } 

     ?> 

    </script> 


</head> 

<body> 

    <form name="customerform" form id="customerform"> 
<p> 


    <select name="customerselect" id="customerselect" onChange="showname()"> 
     <option value="">Select customer</option> 

     <?php 
      $query1 = "SELECT * FROM customer"; 
      $result1 =($mysqli-> query($query1)); 

      // build javascript array 
      while($row=mysqli_fetch_array($result1)){ 
       echo'<option value="'.$row['customer_id'].'">'.$row['forename'].'">'.$row['surname'].'">'.$row['customer_name'].'</option>'; 
      }   

         ?> 
     </select> 
</p> 
<p> 
<input type="text" name="cust" value="" id="cust" /> 

<input type="text" name="cust" value="" id="customerselected" /> 
<input type="text" name="post_code" value="" id="post_code" /> 
</p> 
<p>update 
    <input type="button" name="update" id="update" value="update" onClick="showname()"> 

<p>&nbsp;</p> 
<p> 
    <input name="submit" type="submit" id="submit" value="submit" /> 
</p> 
    </form> 


</body> 

<script>  

     //var customer = Array(); 
     var customer = Array(); 
     //This below is a test multi dimensional Array which does work. // 
     //customer['CCS'] = Array[{forename:'Robert', surname:'Grain', company:'HOMS'}]; 

    function showname() { 


     //this var takes the result of the selected drop down list and shows the correct part of the array. 
     var customerselected = document.getElementById('customer'); 
     customername = customerselected.value; 

     // this does work but not from the array just fills the details up 
     document.customerform.customerselected.value = customername; 

     // the next part takes the selected dropdown data and calls for the correct place in the array 
     // document.getElementById("cust").value = customer['CCS'][0]; 
     // document.getElementById("cust").value = customer[CCS]["forename"] ; 
     // (customer[''][forename]); 
     document.customerform.post_code.value = customer[customerselect]["post_code"]; 


    } 

    window.onload=function() { 
     showname(); 
    } 

</script> 
</html> 

Это исходный код из Проводника в консоли. из массива JavaScript.

</body> 
</html>customer[118] = new Array(customer[118][customer_id] = "118";customer[118][post_code] = "L37 4RG";customer[118][company_name] = "jc knight");customer[119] = new Array(customer[119][customer_id] = "119";customer[119][post_code] = "DE56 7HG";customer[119][company_name] = "farm Customer giles");customer[122] = new Array(customer[122][customer_id] = "122";customer[122][post_code] = "LE67 8FH";customer[122][company_name] = "a test company"); 

Также этот выпадающий список создает:

<select name="customerselect" id="customer" onChange="showname()"> 
     <option value="">Select customer</option> 

     <option value="118">John">Knight"></option><option value="119">Bill">Giles"></option><option value="122">Robert">Grain"></option>  </select> 
</p> 

Может быть, я должен переместить код в нижней части HTML для массива JavaScript, хотя я не был уверен, что если это не будет инициализирован, когда требуется, потому что он сначала запускал HTML. Я немного не уверен, что порядок вещей правильный.

Ошибка я получаю случается, как только я изменить падение downlist и это показывает следующее:

 document.customerform.post_code.value = customer['customerselect'][post_code]; 
} 

X 'post_code' is undefined 

Error I recieve

Я думаю, что где-то я получаю мой document.value неправильно, когда показ моего массива ?

+0

Можем ли мы увидеть образец массивов JavaScript, добавленных в HTML? Вы использовали 'View Source', чтобы проверить, что это рендеринг OK? Существуют ли ошибки JS при загрузке страницы? – halfer

+0

Может ли инициализация 'customer' в более поздней части вашего кода перезаписывать PHP-написанную JS в начале? – halfer

+0

Привет, halfer Я нажал F12 в проводнике, и он показывает следующее. клиент [118] = новый массив (клиент [118] [customer_id] = "118"; клиент [118] [post_code] = "L37 4RG"; клиент [118] [имя_компании] = "jc knight"); [119] = новый массив (клиент [119] [customer_id] = «119», клиент [119] [post_code] = «DE56 7HG», клиент [119] [company_name] = «фермы клиентов»), клиент [122 ] = новый массив (клиент [122] [customer_id] = «122», клиент [122] [post_code] = «LE67 8FH», клиент [122] [company_name] = «тестовая компания»); –

ответ

0

Благодаря smftre для этого. В конце я выбрал jquery и ajax. и я думаю, что это сработало для меня изначально, я пытался сделать код максимально эффективным по полосе пропускания, потому что система должна использоваться, но ajax, по-видимому, является стандартом по причине и работает очень хорошо.

0

Скорее не надейтесь, что здесь будет работать константа. Вместо этого попробуйте ниже в качестве замены:

// build javascript array 
    while($row=mysqli_fetch_array($result1)){ ?> 
     var customer["<?=$row['customer_id']?>"] = []; 
     customer["<?=$row['customer_id'];?>"]['customer_id'] = "<?=$row['customer_id'];?>"; 
     customer["<?=$row['customer_id'];?>"]['post_code'] = "<?=$row['post_code'];?>"; 
     customer["<?=$row['customer_id'];?>"]['company_name'] = "<?=$row['company_name'];?>"; 
    <? } 
+0

Спасибо smftre за это. В конце я выбрал jquery и ajax. и я думаю, что это сработало для меня изначально, я пытался сделать код максимально эффективным по полосе пропускания, потому что система должна использоваться, но ajax, по-видимому, является стандартом по причине и работает очень хорошо. –