2010-12-14 8 views
0

Я хочу применить один автозаполняющий расширитель для нескольких текстовых полей с одинаковым атрибутом name, например.Расширение автозаполнения для нескольких текстовых полей с использованием Javascript

Я просто хочу применить тот же автозаполняющий расширитель ко всем, имеющим name="txtQtyPkgs". Как я могу это сделать? Моего HTML

<table cellspacing="0" cellpadding="0" border="0" style="" id="flex1"> 
     <tbody> 
      <tr id="rowGH03013"> 
       <td align="Left" class="sorted"> 
        <div style="text-align: left; width: 150px;"> 
         GH03013</div> 
       </td> 
       <td align="Left"> 
        <div style="text-align: left; width: 150px;"> 
         999</div> 
       </td> 
       <td align="Left"> 
        <div style="text-align: left; width: 161px;"> 
         <input align="right" type="text" width="30px" name="txtQtyPkgs" maxlength="3" onblur="IntegerOnly(this.id);" 
          id="QtyPkgs19523"></div> 
       </td> 
       <td align="Left"> 
        <div style="text-align: left; width: 446px;"> 
         <input align="left" type="text" width="300px" class="auto" maxlength="100" name="txtBuyerName" 
          id="Buyer19523"></div> 
       </td> 
      </tr> 
      <tr class="erow" id="rowGH03011"> 
       <td align="Left" class="sorted"> 
        <div style="text-align: left; width: 150px;"> 
         GH03011</div> 
       </td> 
       <td align="Left"> 
        <div style="text-align: left; width: 150px;"> 
         999</div> 
       </td> 
       <td align="Left"> 
        <div style="text-align: left; width: 161px;"> 
         <input align="right" type="text" width="30px" name="txtQtyPkgs" maxlength="3" onblur="IntegerOnly(this.id);" 
          id="QtyPkgs19521"></div> 
       </td> 
       <td align="Left"> 
        <div style="text-align: left; width: 446px;"> 
         <input align="left" type="text" width="300px" class="auto" maxlength="100" name="txtBuyerName" 
          id="Buyer19521"></div> 
       </td> 
      </tr> 
     </tbody> 
    </table> 

моей данные XML

<table> 
    <userid>23</userid> 
    <userdispname>GUJARAT PACKERS LTD</userdispname> 
    <usercode>GTPL</usercode> 
</table> 

<table> 
    <userid>26</userid> 
    <userdispname>Lipton India Limited</userdispname> 
    <usercode>Lipton</usercode> 
</table> 
<table> 
    <userid>27</userid> 
    <userdispname>TOSH LTD.</userdispname> 
    <usercode>ATosh</usercode> 
</table> 
<table> 
    <userid>28</userid> 
    <userdispname>SERVICES INDIA PVT. LTD.</userdispname> 
    <usercode>TSI</usercode> 
</table> 
<table> 
    <userid>29</userid> 
    <userdispname>Parekh Company</userdispname> 
    <usercode>Parekh</usercode> 
</table> 
<table> 
    <userid>30</userid> 
    <userdispname>SHREE BALAJI CO.</userdispname> 
    <usercode>Balaji</usercode> 
</table> 
<table> 
    <userid>31</userid> 
    <userdispname>Kesaria Company</userdispname> 
    <usercode>Kesaria</usercode> 
</table> 

моего Javascript

$(document).ready(function() { 
      AuctoCmplBuyer(); 
      $(".auto").autocomplete({ source: [AuctoCmpData] }); 
     }); 
function AuctoCmplBuyer() { 
      $.ajax({ 
       type: "POST", 
       url: "../service/WebService.asmx/XmlData", 
       data: "{strData:'BuyerList'}", 
       contentType: "application/json; charset=UTF-8", 
       dataType: "xml", 
       success: function (msg) { 
        $(msg).find('Table').each(function() { 
         if (StrData.length != 0) { 
          StrData = StrData + ","; 
         } 
         StrData = '{"id":"' + $(this).find('UserID').text() + '","label":"' + $(this).find('UserDispName').text() + '","value":"' + $(this).find('UserDispName').text() + '"}'; 
        }); 
       } 
      }); 
      AuctoCmpData = StrData; 
     } 
+0

Добавить StrData = "["; выше $ (msg) .find() {(...)}; и strData = strData + "]"; после цикла (.each). Так что ваши strData будут в форме [{""; ""}]. Но теперь это в этой форме {"", ""}. Надеюсь, у меня есть – kbvishnu

+0

привет, его работал на меня .. я пытаюсь это на noraml Html .. но как я могу сделать то же самое для текстового поля внутри управления flexgride .... – user484948

ответ

1

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

$(".auto").autocomplete({ 
     source: "../Ajax/AjaxGetData.ashx, 
     minLength: 2, 
     select: function(event, ui) { 
      $(this).val(ui.item.value); 
     } 
    }); 

Подробнее см. Ниже. http://jqueryui.com/demos/autocomplete/#remote

Что я делаю, это сделать класс с именем auto и назначить его ко всему текстовому полю. поэтому когда пользователь вводит значение, он перейдет на страницу обработчика (asp.net), или вы можете использовать страницу .php. На этой странице обработчика я выбираю данные из базы данных, используя оператор like Sql. После выбора значений только Response.Write() (в asp.net) или echo (по ссылке php см.) Для отправки данных. Данные отправляются в формате JSON

[ { "id":"XYZ" , "label":"XYZ" , "value": "XYZ"}] 

выше формат JSON

для всех авто предлагают вам, возможно, придется много data.To сделать, так что вы должны получить общее количество результатов, возвращаемых после выполнения запроса и make loop.Интициализируйте строковую переменную со значением по умолчанию как "[" до начала и добавьте строку с {"id":"Data","label:Data","value":"data"} (это c onstitutes объект JSON). Если у него есть больше, чем просто добавьте , и сделайте цикл в конце, добавьте "]" в строку.

Так ур массив будет в формате

[ { "id":"XYZ1" , "label":"XYZ1" , "value": "XYZ1"}, { "id":"XYZ2" , "label":"XYZ2" , "value": "XYZ2"}] 

[' denotes the starting of array and ']' denotes the end The { `означает запуск объекта и«}»обозначает конец

Pls сослаться JSON знать больше

+0

в моем случае у меня есть сбор данных (массив) .. чем вызов каждый время .. как я могу сделать это с помощью массива .... – user484948

+0

да, это будет так. Там может быть много значений. Так что вам нужно добавить значения.Pls chk ответ – kbvishnu

+0

Я думаю, что новое обновление в моем ответе поможет u :) – kbvishnu

0
$(document).ready(function() { 
      AuctoCmplBuyer(); 
Auctocomplete functionality to each textbox 
      $(".auto").autocomplete({ source: AuctoCmpData }); 
     }); 

function AuctoCmplBuyer() { 
      $.ajax({ 
       type: "POST", 
       url: "../service/TWWebService.asmx/XmlData", 
       data: "{strData:'BuyerList'}", 
       contentType: "application/json; charset=UTF-8", 
       dataType: "xml", 
       success: function (msg) { 
        $(msg).find('Table').each(function() { 
         rowObj = new Object(); 
         rowObj.col1 = $(this).find('UserDispName').text() + '-' + $(this).find('UserID').text(); 
         AuctoCmpData.push(rowObj); 
        }); 
       } 
      }); 
     } 

Я так делаю ... я не понимаю, как вы сказали «гари»

+0

Ур здесь, используя XML.Я просто заменяю XML и загружаю все значения во время загрузки страницы. Я просто предложил способ получить данные только тогда, когда пользователь нажимает клавишу. Я обряд? – kbvishnu

+0

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

Смежные вопросы