2013-10-22 61 views
2

我有一個表,我想在列上使用自動完成。 (medSearch是類此列設置)Jquery addRow和自動完成

我使用jQuery的自動完成代碼

autocomp_opt={ 
    source: function(request,response){ 
     var myTable = [];   
     var searchStr = $(".medSearch").val(); 

     if (searchStr.length>2) 
     {   
      alert(searchStr);      
      var soapEnv = "... searchStr....."; 

      $.ajax(
      {    
       ............. 

然後我用雲根的addRow的JavaScript。

$(document).ready(function(){ 

    $(".addRow").btnAddRow(function(row){row.find(".medSearch").autocomplete(autocomp_opt)}); 
    $(".delRow").btnDelRow(); 
    $(".medSearch").autocomplete(autocomp_opt); //end autocomplete 

}); //end document. ready 

但是,自動完成無法正常與新添加的行的列工作。

用戶在此新行的列中的輸入未被用於自動完成查詢。

它始終將第一行的列內容作爲輸入。

我認爲這是因爲jQuery總是帶有類'.medSearch'的第一個項目。然後它不需要當前行的用戶輸入。

我不知道如何解決它。

非常感謝您的幫助!

我的另一個問題: 其實,這是我進一步的問題(這是太長了評論)

我有類標識符medCode和medDin兩列,他們需要通過自動完成的結果來填充:

    success: function(xml){ 

        //alert($(xml).text()); 
        //traverse the xml 
        var xmlItem = $(xml).find("*").eq(0); 

        //alert($(xmlItem)[0].nodeName); 

        var xmlMedItemArr = $(xmlItem).children().children().children(); 

        //alert("Phyiscian Items: "+$(xmlPhyItemArr).length);   


        // go through each of them 
        $(xmlMedItemArr).each(function() 
        { 
          //do what? get each text 
          var childList = $(this).children(); 

          myTable.push({ 
           label: $(childList[0]).text() + " - " + $(childList[2]).text(), 
           value: $(childList[0]).text(), 
           din: $(childList[2]).text(), 
           code: $(childList[1]).text() 
          }); 

        }); 

     select: function(event,ui) { 
      $(".medCode").val(ui.item.code); 
      $(".medDin").val(ui.item.din); 
     }, 

但由於以前的問題,在我從自動完成結果列表中選擇一個項目,那麼所有行的兩列將被設置爲相同的值。

這怎麼能正確完成?

非常感謝您的幫助!

以下是表格部分的html。 (我們使用EBASE喜作爲平臺,這是一個拖放網頁開發工具,它會自動生成HTML和一些腳本,你會在HTML代碼中看到。)

<!----><div class="CTID-1182-_ eb-1182-panel "> 
<!---->Current Medications</div> 
<!----><table class="CTID-1156-_ eb-1156-tableControl " summary=""> 
<tr> 
<td> 
<table class="eb-1156-tableNavRow " style="margin-top:5px;margin-bottom:5px;" summary="" width="100%" border="0" cellpadding="0" cellspacing="0"> 
<tr> 
<td width="99%"> 
<span class="eb-1156-tableNavRowInfo " style="padding-left:10px;">Displaying 1...1 of 1 records</span></td> 
<td width="1%" align="right"> 
</td> 
</tr> 
</table> 
</td> 
</tr> 
<tr> 
<td> 
<table class="eb-1156-tableContent " summary="" title=""> 
<colgroup> 
<col style="width:20%;"><col style="width:4%;"><col style="width:4%;"><col style="width:7%;"><col style="width:7%;"><col style="width:7%;"><col style="width:7%;"><col style="width:11%;"><col style="width:11%;"></colgroup> 
<tr> 
<th id="CTID-1156-_-C-1164" class="eb-1156-tableColumnHeader eb-1164-tableColumnHeader "> 
Medicine Name</th> 
<th id="CTID-1156-_-C-1168" class="eb-1156-tableColumnHeader eb-1168-tableColumnHeader "> 
Med code</th> 
<th id="CTID-1156-_-C-1170" class="eb-1156-tableColumnHeader eb-1170-tableColumnHeader "> 
Med drug identification number</th> 
<th id="CTID-1156-_-C-1175" class="eb-1156-tableColumnHeader eb-1175-tableColumnHeader "> 
Dosage</th> 
<th id="CTID-1156-_-C-1177" class="eb-1156-tableColumnHeader eb-1177-tableColumnHeader "> 
Unit</th> 
<th id="CTID-1156-_-C-1179" class="eb-1156-tableColumnHeader eb-1179-tableColumnHeader "> 
Frequency</th> 
<th id="CTID-1156-_-C-1181" class="eb-1156-tableColumnHeader eb-1181-tableColumnHeader "> 
Unit</th> 
<th id="CTID-1156-_-C-1200" class="eb-1156-tableColumnHeader eb-1200-tableColumnHeader "> 
</th> 
<th id="CTID-1156-_-C-1196" class="eb-1156-tableColumnHeader eb-1196-tableColumnHeader "> 
</th> 
</tr> 
<tr class="CTID-1156-_-R-0 eb-1156-tableRow eb-1156-tableRow "> 
<td class="eb-1156-tableContentCell eb-1164-tableColumn " headers="CTID-1156-_-C-1164"><div class="eb-1164-Editor " style="display:inline-block;zoom:1;*display:inline;"> 
<input id="CTID-1164-_-C-0" class="CTID-1164-_-C-0 eb-1156-tableContentData eb-1164-EditorInput medSearch" type="text" name="CTRL:1164:_:C:0" size="50" maxlength="128" title="Medicine Name"></div> 
</td> 
<td class="eb-1156-tableContentCell eb-1168-tableColumn " headers="CTID-1156-_-C-1168"><div class="eb-1168-Editor " style="display:inline-block;zoom:1;*display:inline;"> 
<input id="CTID-1168-_-C-0" class="CTID-1168-_-C-0 eb-1156-tableContentData eb-1168-EditorInput medCode" type="text" name="CTRL:1168:_:C:0" size="5" maxlength="32" title="Med code"></div> 
</td> 
<td class="eb-1156-tableContentCell eb-1170-tableColumn " headers="CTID-1156-_-C-1170"><div class="eb-1170-Editor " style="display:inline-block;zoom:1;*display:inline;"> 
<input id="CTID-1170-_-C-0" class="CTID-1170-_-C-0 eb-1156-tableContentData eb-1170-EditorInput medDin" type="text" name="CTRL:1170:_:C:0" size="5" maxlength="64" title="Med drug identification number"></div> 
</td> 
<td class="eb-1156-tableContentCell eb-1175-tableColumn " headers="CTID-1156-_-C-1175"><div class="eb-1175-Editor " style="display:inline-block;zoom:1;*display:inline;"> 
<input id="CTID-1175-_-C-0" class="CTID-1175-_-C-0 eb-1156-tableContentData eb-1175-EditorInput " type="text" name="CTRL:1175:_:C:0" size="5" maxlength="10" title="Dosage"></div> 
</td> 
<td class="eb-1156-tableContentCell eb-1177-tableColumn " headers="CTID-1156-_-C-1177"><div class="eb-1177-Editor " style="display:inline-block;zoom:1;*display:inline;"> 
<select id="CTID-1177-_-C-0" class="CTID-1177-_-C-0 eb-1156-tableContentData eb-1177-EditorInput " name="CTRL:1177:_:C:0" title="Unit"><option selected="selected" value="">Please select</option><option value="109">mg</option><option value="110">ml</option></select></div> 
</td> 
<td class="eb-1156-tableContentCell eb-1179-tableColumn " headers="CTID-1156-_-C-1179"><div class="eb-1179-Editor " style="display:inline-block;zoom:1;*display:inline;"> 
<input id="CTID-1179-_-C-0" class="CTID-1179-_-C-0 eb-1156-tableContentData eb-1179-EditorInput " type="text" name="CTRL:1179:_:C:0" size="5" maxlength="64" title="Frequency"></div> 
</td> 
<td class="eb-1156-tableContentCell eb-1181-tableColumn " headers="CTID-1156-_-C-1181"><div class="eb-1181-Editor " style="display:inline-block;zoom:1;*display:inline;"> 
<select id="CTID-1181-_-C-0" class="CTID-1181-_-C-0 eb-1156-tableContentData eb-1181-EditorInput " name="CTRL:1181:_:C:0" title="Unit"><option selected="selected" value="">Please select</option><option value="112">per day</option><option value="113">per 4 hours</option></select></div> 
</td> 
<td class="eb-1156-tableContentCell eb-1200-tableColumn " headers="CTID-1156-_-C-1200"><input class="CTID-1200-_-C-0 eb-1200-Button addRow" type="submit" name="CTRL:1200:_:D:0" value="Add" title=""></td> 
<td class="eb-1156-tableContentCell eb-1196-tableColumn " headers="CTID-1156-_-C-1196"><img class="eb-1196-Image delRow" src="shared/uohi/images/delete_icon.gif" alt="" title=""> 
</td> 
</tr> 
</table> 
</td> 
</tr> 
</table> 
+2

歡迎SO!你可以分享btnAddRow()和btnDelRow()的代碼嗎?我不太明白你在做什麼。 – Derek

+0

定義了「childList」的位置? –

+0

我將這部分代碼添加到了我的問題中。我認爲問題可能仍然與我的列.medCode和.medDin的類標識符有關。然後,當設置值時,所有行中具有這些類標識符的列都設置爲相同的值。 –

回答

0

用途:

var searchStr = request.term; 

而不是你目前擁有的。

現有代碼:

var searchStr = $(".medSearch").val(); 

讀取符合選擇.medSearch

+0

嗨安德魯,非常感謝。我改爲request.term。它現在有效! –

+0

@XiaoliRen:沒問題!如果有幫助,請「接受」答案! –

+0

我還有一個問題:我有兩個更多的fi –

0

感謝您對您的所有幫助第一元素的值。 我現在有正確的值通過使用下面的代碼:

  $(this).closest('tr').find(".medCode").val(ui.item.code); 
      $(this).closest('tr').find(".medDin").val(ui.item.din); 

感謝, 小莉