我知道这个问题已经有答案了。但我希望这篇文章能够帮助到未来的某个人,节省时间和痛苦。
(你可以根据你的jQuery版本将'CRM.$'替换为'$'或'jQuery')
完整的代码如下:我为一个文本框编写了自动完成功能,希望能帮到别人。
CRM.$( 'input[id^=custom_78]' ).autocomplete({
autoFill: true,
select: function (event, ui) {
var label = ui.item.label;
var value = ui.item.value;
var book_year_value = CRM.$('select[id^=custom_77] option:selected').text().replace('Book Year ','');
var subject_value = book_year_value + '/' + ui.item.label;
CRM.$('#subject').val(subject_value);
CRM.$( 'input[name=product_select_id]' ).val(ui.item.value);
CRM.$('input[id^=custom_78]').val(ui.item.label);
return false;
},
source: function(request, response) {
CRM.$.ajax({
url: productUrl,
data: {
'subCategory' : cj('select[id^=custom_77]').val(),
's': request.term,
},
beforeSend: function( xhr ) {
xhr.overrideMimeType( "text/plain; charset=x-user-defined" );
},
success: function(result){
result = jQuery.parseJSON( result);
response(CRM.$.map(result, function (val,key) {
return {
label: val,
value: key
};
}));
}
})
.done(function( data ) {
if ( console && console.log ) {
}
});
}
});
PHP代 码,演示如何将数据返回给此jquery自动完成的ajax调用:
class CRM_Civicrmactivitiesproductlink_Page_AJAX {
static function getProductList() {
$name = CRM_Utils_Array::value( 's', $_GET );
$name = CRM_Utils_Type::escape( $name, 'String' );
$limit = '10';
$strSearch = "description LIKE '%$name%'";
$subCategory = CRM_Utils_Array::value( 'subCategory', $_GET );
$subCategory = CRM_Utils_Type::escape( $subCategory, 'String' );
if (!empty($subCategory))
{
$strSearch .= " AND sub_category = ".$subCategory;
}
$query = "SELECT id , description as data FROM abc_books WHERE $strSearch";
$resultArray = array();
$dao = CRM_Core_DAO::executeQuery( $query );
while ( $dao->fetch( ) ) {
$resultArray[$dao->id] = $dao->data;
}
echo json_encode($resultArray);
CRM_Utils_System::civiExit();
}
}