2009-06-24 57 views
0

我在此處的訂單商品的搜索產品字段中啓用了自動建議功能:jquery livequery沒有修復autosuggest?

這裏的問題是,當我添加新的搜索產品字段(訂購商品標題下的綠色按鈕)時,自動建議插件無法運行新的領域。從我閱讀的幾篇文章中,我認爲autosuggest會解決這個問題,但不解決問題。任何想法爲什麼?

自動提示:

$("#PRODUCTNAME").autocomplete("orders.cs.asp?Process=ListProducts", { 
    selectFirst: false 
}); 

$("#PRODUCTNAME").result(function(event, data, formatted) { 
    if (data) 
     $("#PRICE").html(data[1]); 
     $("#ID").html(data[2]); 
     $("#UNITPRICE").html(data[1]); 
     $("#PRODUCTID").html(data[2]); 
}); 

增加新的領域

$('#AddProduct').livequery('click', function(event) { 
    $('#OrderProducts').append('<div class="column width50"><input type="text" id="PRODUCTNAME" name="PRODUCTNAME" value="" class="width98" /><input type="hidden" id="PRODUCTID" name="PRODUCTID" /><input type="hidden" id="UNITPRICE" name="UNITPRICE" /><small>Search Productsvalue="" class="width98" /><small>Quantity</small></div><div class="column width30"><span class="prices">Unit Price:<br />Total Price:</span></div>'); 
    return false; 

});

HTML

 <fieldset> 
      <h2>Order Items</h2> 
      <div id="OrderProducts"> 
       <a href="#" id="AddProduct"><img src="icons/add.png" alt="Add" /></a><a href="#" id="DeleteProduct"><img src="icons/cancel.png" alt="Cancel" /></a> 
      </div> 

       <input type="hidden" id="PRODUCTID" name="PRODUCTID" /> 
       <input type="hidden" id="UNITPRICE" name="UNITPRICE" /> 
       <small>Search Products</small> 
      </div> 
      <div class="column width20"> 
       <input type="text" id="UNITPRICE" name="UNITPRICE" value="" class="width98" /> 
       <small>Quantity</small> 
      </div> 
      <div class="column width30"> 
       <span class="prices">Unit Price:<br />Total Price:</span> 
      </div> 
     </fieldset> 
}); 
+0

你有拖尾});在「添加新字段」腳本之後,對嗎? – MSpreij 2009-06-24 18:54:58

+0

我可能有嚴重的複製/粘貼。對不起,我會嘗試修復它。但是,我有尾隨。 – Efe 2009-06-24 19:46:44

回答

0

我認爲問題是,你不自動完成添加新的元素。你實際上並不需要livequery。因此,改變你的代碼的第二塊,像這樣:

$('#AddProduct').click(function() { 
     var adding = $('<div class="column width50"><input type="text" id="PRODUCTNAME" name="PRODUCTNAME" value="" class="width98" /><input type="hidden" id="PRODUCTID" name="PRODUCTID" /><input type="hidden" id="UNITPRICE" name="UNITPRICE" /><small>Search Products</small></div><div class="column width20"><input type="text" id="UNITPRICE" name="UNITPRICE" value="" class="width98" /><small>Quantity</small></div><div class="column width30"><span class="prices">Unit Price:<br />Total Price:</span></div>');   
     $('#OrderProducts').append(adding); 

     adding.find("#PRODUCTNAME").autocomplete("orders.cs.asp?Process=ListProducts", { 
      selectFirst: false 
     }).result(function(event, data, formatted) { 
      if (data) { 
       adding.find("#PRICE").val(data[1]); 
       adding.find("#ID").val(data[2]); 
       adding.find("#UNITPRICE").val(data[1]); 
       adding.find("#PRODUCTID").val(data[2]); 
      } 
     }); 

     return false; 
}); 

我認爲應該這樣做,在這裏和那裏除非一個或兩個小的調整。

關於如何處理表單元素的方式只有兩條評論 - 您的方法會導致多個元素具有相同的ID,這是無效的(儘管它會起作用) - 也許更改它以基於類進行選擇代替。其次,您使用了html函數來設置輸入的值 - 甚至不能確定它是否有效,所以在我建議的解決方案中,我使用val替換了html調用。