开发者

I need an expample of jQuery Autocomplete returning id and name using ajax

I need an example of how to code a jQuery autocomplete to populate product_id while showing the product_name calling an ajax page "remote.php"

<input name="product_name" id="product_name" type="text" value="" />
<input name="product_id" id="product_id" type="hidden" value="" />


remote.php:

$partial = addslashes($_POST['partial_search']);
$myDataRows = array(); 
$result = mysql_query ("SELECT product_id, product_name FROM products 
   WHERE product_name like "%$partial%");
while ($row = mysql_fetch_row($result)) {
   array_push($myDataRows, $row);
}
$ret = json_encode ($myDataRows);
echo $ret;

I'm not sure how to code the jQuery autocomplete and if I need to change remote.php

thanks

ADDED LATER:

I worked out another solution:

<script type="text/javascript">
function nqi_search (type, id_name, text_name)
{
    $( "#"+text_name ).autocomplete({
        source: "remote.php?&t="+type,
        minLength: 1,
        select: function( event, ui ) {
            $( "#"+id_name ).val(ui.item.id );
        }开发者_StackOverflow社区
    });
}
</script>

<script type="text/javascript">
jQuery(document).ready(function() {

    nqi_search ("product_search", "product_id", "product_name");

    // also you can have many on one page with:
    nqi_search ("vendor_search", "vendor_id", "vendor_name");   


});
</script>

There's one problem. it doesn't seem to work if the nqi_search function is put into a .js file. I have no idea why?


This is how I do it:

Note, I've coded a special feature where the json can flag an item as a message instead and in this way you can put messages in the list (eg I put a "Addition X items not shown" for long lists). To use the message feature, but the text in the label field and a true boolean for the message field.

To use this on the page I just have

setupAutocomplete(<id of textbox>,<path to service>);

  $.ajaxSetup({
      type: "POST",
      contentType: "application/json; charset=utf-8",
      data: "{}",
      dataFilter: function(data) {
         var msg;

         if (typeof (JSON) !== 'undefined' && typeof (JSON.parse) === 'function')
            msg = JSON.parse(data);
         else
            msg = eval('(' + data + ')');

         if (msg.hasOwnProperty('d'))
            return msg.d;
         else
            return msg;
      },
      error: function(msg) {
         $('#error').html(msg.responseText)
      }
   });


// remove this to get rid of custom message handling
$.widget("custom.redcomplete", $.ui.autocomplete, {
   _renderMenu: function(ul, items) {
      var self = this;
      $.each(items, function(index, item) {

         if (item.message)
            ul.append("<li class='ui-menu-item special-red'>&nbsp;" + item.label + "</li>");
         else
            self._renderItem(ul, item)
      });
   }


function setupAutocomplete(inID, inURL) {
   var myTB = $("[id$='_" + inID + "']");
   // change redcomplete to autocomplete to get rid of message handling
   myTB.redcomplete({
      source: function(request, response) {
         $.ajax({
            url: inURL,
            data: "{'filter': '" + request.term + "'}",
            success: function(data) {
               response($.map(data, function(item) {
                  return {
                     label: item.text,
                     value: item.id,
                     // remove this line and the , above to get rid of message handling
                     message: item.message
                  };
               }));
            }
         })
      },
      delay: 500,
      minLength: 3,
      focus: function(event, ui) {
         myTB.val(ui.item.label);
         return false;
      },
      select: function(event, ui) {
        // action for the select here.
         return false;
      },
      open: function() {
         $(this).removeClass("ui-corner-all").addClass("ui-corner-top");
      },
      close: function() {
         $(this).removeClass("ui-corner-top").addClass("ui-corner-all");
      }

   });
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜