新浪微博,微信@功能jquery插件,@xxsome,ajax请求数据,前端渲染列表项选择!...

jquery.mentsInput插件使用:
官网:http://podio.github.io/jquery...
官网有使用简介,这里记录下插件使用过程遇到的坑。
js部分:
if( settings.elastic ) {
elmInputBox.elastic();
}
会报错,这里注释掉 elmInputBox.elastic();可以继续使用。
使用中数据格式是data这样的:

$('textarea.mention').mentionsInput({
onDataRequest:function (mode, query, callback) {
var data = [

  { id:1, name:'Kenneth Auchenberg', 'avatar':'http://cdn0.4dots.com/i/customavatars/avatar7112_1.gif', 'type':'contact' },
  { id:2, name:'Jon Froda', 'avatar':'http://cdn0.4dots.com/i/customavatars/avatar7112_1.gif', 'type':'contact' },
  { id:3, name:'Anders Pollas', 'avatar':'http://cdn0.4dots.com/i/customavatars/avatar7112_1.gif', 'type':'contact' },
  { id:4, name:'Kasper Hulthin', 'avatar':'http://cdn0.4dots.com/i/customavatars/avatar7112_1.gif', 'type':'contact' },
  { id:5, name:'Andreas Haugstrup', 'avatar':'http://cdn0.4dots.com/i/customavatars/avatar7112_1.gif', 'type':'contact' },
  { id:6, name:'Pete Lacey', 'avatar':'http://cdn0.4dots.com/i/customavatars/avatar7112_1.gif', 'type':'contact' }
];

data = _.filter(data, function(item) { return item.name.toLowerCase().indexOf(query.toLowerCase()) > -1 });

callback.call(this, data);

}
});
发请求后api返回数据结构是这样的:
[{
"last_update_time":1479719379472,
"asin":"B012AADEMI",
"list_price":null,
"name":"WildBird Care Vertical Pull-out Tray Bird Feeder BCF4A,
Natural color", "publisher":"WildBird Care LLC",
"product_width":9.0,
"product_length":6.0,
"storage_item":[
],
"brand":"WildBird Care",
"purchase_items":[
],
"standard_sku":null,
"product_type_name":"PET_SUPPLIES",
"image_url":"http://ecx.images-amazon.com/...",
"product_height":14.2,
"product_group":"Pet Products",
"id":"bbd45493-baa0-4862-ab24-7083ea203b88",
"product_weight":2.4
},
{
"last_update_time":1479859200000,
"asin":"B012AADEWI",
"list_price":24.15,
"name":"WildBird Care Wooden Upside-down Suet Feeder BCF2A,
Natural Color", "publisher":"WildBird Care LLC",
"product_width":9.1,
"product_length":9.3,
"storage_item":[
],
"brand":"WildBird Care",
"purchase_items":[
],
"standard_sku":null,
"product_type_name":"PET_SUPPLIES",
"image_url":"http://ecx.images-amazon.com/...",
"product_height":4.7,
"product_group":"Pet Products",
"id":"87a04d9b-0b69-4e3d-a19f-19f3d4bdb4f0",
"product_weight":1.95
}]

所以将数据结构写成符合预期的:name这个参数可能有几个是 null会报错,过滤掉。
var info = $.grep(JSON.parse(resData),function (v,i) {

                    if(v.name!=null){
                        return v.name;
                    }
                });
                var arr = [];
                for (var i = 0;i<info.length;i++){
                    var obj ={};
                    obj.id =info[i].asin;
                    obj.name = info[i].name;
                    obj.avatar = info[i].image_url;
                    obj.type='contact';
                    arr.push(obj);
                }

预期的数据结构这样:
{
'id' : 1,
'name' : 'Kenneth Auchenberg',
'avatar': 'http://cdn0.4dots.com/i/custo...',
'icon' : 'icon-16 icon-person',
'type' : 'contact'
}
我把id这个参数换成了要反会给后端的asin(类似id),在列表项显示产品名称,选择对应的产品后,
会替换成对应的产品asin;然后在调用getMentions这个函数获取数据传给后端。
var asin = '';

    $('#asin').mentionsInput('getMentions', function(data) {
        $.each(data,function (index,val) {
            asin += val.id+';'
        })
    });

完整栗子如下:

<textarea id="asin" placeholder="请使用@产品名模糊查询后选择对应产品" cols="140" rows="7"></textarea>
</div>
<div style="margin-bottom: 30px">
<button id="download" class="btn btn-success">下载Excel</button>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<script src="https://cdn.rawgit.com/jashkenas/underscore/1.8.3/underscore-min.js"></script>
<script src='../assets/js/jquery-mentionsInput.js' type='text/javascript'></script>
<script src="../assets/js/jquery.toast.min.js"></script>
   <script>

$(function () {
    $('#asin').mentionsInput({
        onDataRequest:function (mode, query, callback) {
            $.getJSON(G.Url+'product?name='+query, function(resData) {
                var info = $.grep(JSON.parse(resData),function (v,i) {
                    if(v.name!=null){
                        return v.name;
                    }
                });
                var arr = [];
                for (var i = 0;i<info.length;i++){
                    var obj ={};
                    obj.id =info[i].asin;
                    obj.name = info[i].name;
                    obj.avatar = info[i].image_url;
                    obj.type='contact';
                    arr.push(obj);
                }

                onDataRequest = _.filter(arr,
                        function(item) {
                            return item.name.toLowerCase().indexOf(query.toLowerCase()) > -1
                        });
                callback.call(this, onDataRequest);
            });
        }

    });
});

$('#download').click(function () {
    var asin = '';
    $('#asin').mentionsInput('getMentions', function(data) {
        $.each(data,function (index,val) {
            asin += val.id+';'
        })
    });

    $('<form action="'+G.Url+'template/excel" method="post"     enctype="application/json">' +
            '<input type="text" name="category" value="price_correlation_analysis">' +
            '</form>').append($('<input/>').attr('name','info').val(asin)).submit().remove();
});

</script>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Taro.js是一种支持多个小程序平台开发的框架,它提供了一种简洁、高效的方式来创建微信小程序。在Taro.js中,我们可以使用城市选择列表组件来方便地实现城市选择功能微信小程序城市选择列表是指用户可以在小程序中选择所在城市的功能。使用Taro.js开发微信小程序时,我们可以通过调用微信小程序提供的定位功能,获取用户所在位置的经纬度信息。然后,我们可以将经纬度信息传递给城市选择列表组件,让用户选择所在城市。 城市选择列表通常包括省份和城市两级下拉菜单。当用户选择省份时,城市列表会动态更新为该省份对应的城市列表。用户可以通过滚动或搜索的方式,在城市列表选择目标城市。用户选择完成后,我们可以将所选择的城市信息传递给后端服务器,进行进一步的处理。 在Taro.js中,我们可以使用类似以下的代码来实现城市选择列表: ``` import { View, Picker } from '@tarojs/components' const cities = { 北京: ['北京市'], 上海: ['上海市'], 广东: ['广州市', '深圳市', '珠海市', '东莞市'], ... } export default class CitySelector extends Component { state = { province: '', city: '', } handleProvinceChange = e => { const province = e.detail.value const city = cities[province][0] this.setState({ province, city }) } handleCityChange = e => { const city = e.detail.value this.setState({ city }) } render() { const { province, city } = this.state return ( <View> <Picker mode='selector' range={Object.keys(cities)} onChange={this.handleProvinceChange}> <View>{province || '请选择省份'}</View> </Picker> <Picker mode='selector' range={cities[province]} onChange={this.handleCityChange}> <View>{city || '请选择城市'}</View> </Picker> </View> ) } } ``` 以上代码中,我们定义了一个城市选择列表组件`CitySelector`,其中使用了`Picker`组件来实现下拉选择功能。`cities`对象存储了各省份对应的城市列表。当用户选择省份时,触发`handleProvinceChange`函数,在城市列表中显示对应省份的城市。当用户选择城市时,触发`handleCityChange`函数,更新城市信息。最终,用户选择的省份和城市会保存在`state`中,方便后续的数据处理和传递。 通过这样的方式,我们可以在Taro.js微信小程序中实现城市选择列表功能。希望这个回答能对你有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值