在Wordpress

时间:2018-08-26 20:32:30

标签: php jquery wordpress autocomplete

当用户在字段中输入内容时,我想显示来自WordPress数据库的建议。我写了下面的代码,但是不能完全按照我的意愿来工作。

实际上,我是通过php从数据库中获取数据的,该数据为空白div名称 php的输出显示如下所示
,'','','','','','','','','','','','','hdfgh','ddd','','Zanga ',',',',',',',','Susana',','ghjgf',',',','1212','2',',' ,'dfhg','vcn','','xcbxxb','','','','Beathe','Corredor','','','','','','' ,'cvcxg','','','2','ghjk','level41','','',''

我用jquery删除了黑色的“,并将'替换为”之后,输出将如下所示 ,“ hdfgh”,“ ddd”,“ Zanga”,“ Susana”,“ ghjgf”,“ 1212”,“ 2”,“ dfhg”,“ vcn”,“ xcbxxb”,“ Beathe”,“ Corredor”,“ cvcxg“,” 2“,” ghjk“,” level41“

如果我将它作为静态传递给源,例如jquery中的source:[“ option1”,“ option2”,“ option3”],那么它将运行良好,但是当我通过诸如source:[value15]这样的变量传递给它时,它将显示一个选项,如下所示 ,“ hdfgh”,“ ddd”,“ Zanga”,“ Susana”,“ ghjgf”,“ 1212”,“ 2”,“ dfhg”,“ vcn”,“ xcbxxb”,“ Beathe”,“ Corredor”,“ cvcxg”,“ 2”,“ ghjk”,“ level41” 但是当我输入类似hdf的输入时,我想像这样单独显示它,然后建议选项将显示上述选项中的hdfgh

谁能帮助我

jQuery(document).ready(function() {
    jQuery('#primaryy').text( jQuery('#primaryy').text().replace(/\'/g, '"') );
    jQuery('#primaryy').text( jQuery('#primaryy').text().replace(/\, ""/g, '') );
 
    var value14 =   jQuery("#primaryy").text();
    
    var value15 = value14;
    jQuery(function() {
        jQuery("#washer_92").autocomplete({
            source: [value15],
            select: function(event, ui) {
                jQuery(event.target).val(ui.item.value);
               
                return false;
            },
            minLength: 1
        });
    });
});
<div class="wrapp">
    <div id="primaryy" class="content-area">
	  <table border="1">
	  <?php 
         global $wpdb;
$result = $wpdb->get_results("SELECT * FROM aves_postmeta where meta_key ='4_level_first'");
foreach($result as $print){
$dbdata=$print->meta_value; ?>
<tr>
<td><?php echo ", '".$dbdata."' "; ?></td>
</tr>
</table>
<?php
}
		?></div></div>
<input type="text" id="washer_92">

1 个答案:

答案 0 :(得分:0)

我注意到您将输入值作为源传递,这将使您一无所获,因为这在您的页面首次加载时基本上是未设置的,并且也没有调用ajax句柄来执行任何数据库操作。 要解决此问题,请按如下所述更改您的代码:

jQuery(document).ready(function($) {
    function splitsource( val ) {
        return val.split( /,\s*/ );
    }
    function extractLast( term ) {
        return splitsource( term ).pop();
    }
    $('#primaryy').on('keypress', function(event) {
        if ( (event.keyCode === $.ui.keyCode.TAB || event.keyCode === $.ui.keyCode.ENTER) && $( this ).autocomplete( "instance" ).menu.active ) {
            event.preventDefault();
        }
        $('#primaryy').text( jQuery('#primaryy').text().replace(/\'/g, '"') );
        $('#primaryy').text( jQuery('#primaryy').text().replace(/\, ""/g, '') );
        $(this).autocomplete({
            source: function( request, response ) {
                var re = $.ui.autocomplete.escapeRegex(request.term);
                var matcher = new RegExp("^" + re, "i");
                $.getJSON( ajax_object.ajax_url+"?action=search_names&term="+re, function(data){
                    response($.map(data, function (v, i) {
                            return {
                                label: v.value,
                                value: v.value,
                                id: v.id
                            };
                        }));
                } );
            },
            search: function() {
                // custom minLength
                var term = extractLast( this.value );
                if ( term.length < 2 ) {
                    return false;
                }
            },
            focus: function() {
                // prevent value inserted on focus
                return false;
            },
            select: function (event, ui){
                //Perform any custom action that you might want on the keyword being selected.                          
            },
            minLength: 3,
            classes: {
                "ui-autocomplete": 'primaryy-custom-combobox-menu'
            }
        });
    });
});

请注意,您应该将ajax句柄注册为search_names,并在其中执行必要的数据库操作并将结果返回到js文件中的自动完成功能。