javascript - 远程加载下拉选项时,语义 UI 不会替换 GET 路由中的 {value}

标签 javascript semantic-ui

这是我的 API 设置:

//-------------------------------------------------------------------------
// Define API endpoints once globally.
//-------------------------------------------------------------------------
$.fn.api.settings.api = {
  'find cool cats' : '/search/coolcats?query={value}'
};

路由返回正确的 JSON 响应 as per the documentation :

// For example, "http://localhost:3000/search/coolcats?query=cool" returns this limited array of results:

{
    "success": true,
    "results": [
        {
            "name": "Cool Cat Cooper",
            "value": "Cool Cat Cooper"
        },
        {
            "name": "Cool Cat Charlie",
            "value": "Cool Cat Charlie"
        },
        {
            "name": "Cool Cat Mittens",
            "value": "Cool Cat Mittens"
        }
    ]
}

我在某个时候将这个 HTML 附加到一个表单中(它与上面文档引用中的“最喜欢的动物”代码相同):

var coolCatsField = '<div class="field">';
        coolCatsField += '<label>Find a cool cat:</label>';
        coolCatsField += '<div class="ui fluid search selection dropdown cool_cat_search">';
            coolCatsField += '<input type="hidden">';
            coolCatsField += '<i class="dropdown icon"></i>';
            coolCatsField += '<input type="text" class="search" tabindex="0">';
            coolCatsField += '<div class="default text">';
                coolCatsField += 'Start typing to search or add';
            coolCatsField += '</div>';
            coolCatsField += '<div class="menu" tabindex="-1"></div>';
        coolCatsField += '</div>';
    coolCatsField += '</div>';

$('#someFormField') // Is a <div class="field">...</div> as well.
    .after(coolCatsField);

然后使用 API 设置初始化 .dropdown():

$('.cool_cat_search').dropdown({
    apiSettings : {
        action   : 'find cool cats',
        throttle : 500
    }
});

语义 UI 应该 append route value automatically ,但它显然不适用于下拉菜单,并且出现错误:

API: Missing a required URL parameter: value /search/coolcats?query={value}


我尝试了什么

添加一个urlData 属性;结果它将 {value} 替换为空字符串,因为 jQuery 的 .val() 无法捕获任何内容,即使 .search 输入(我确保它在每个字符后都连接到服务器)。不过,之后在控制台中触发 .val() 会返回我在字段中输入的任何内容。

$('.cool_cat_search')
    .dropdown() // I think it should be initialized first for .val() to work.
    .dropdown({
        apiSettings : {
            action   : 'find cool cats',
            throttle : 500,
            urlData  : {
                value : $('.cool_cat_search .search').val()
            }
        }
    });

当然,我也尝试查看它是否总体上有效,并且它在所有前端花里胡哨的情况下都能正常工作:

$('.cool_cat_search')
    .dropdown({
        apiSettings : {
            action   : 'find cool cats',
            throttle : 500,
            urlData  : {
                value : 'cool'
            }
        }
    });

我还尝试在 urlData 属性中使用语义 UI 获取值的方法,而不是 jQuery 的 .val(),但没有成功。我根本不明白它是如何工作的,事实上,也许我应该在 .search 输入上初始化它,但无论哪种方式,它都会返回一个空字符串或一个对象。

$('.cool_cat_search')
    .dropdown('get value');

在我从文档中复制该 HTML 之前,我尝试在一个选择标记上初始化一个下拉列表,它生成的 HTML 与上面的略有不同。同样,它作为下拉菜单工作,但在检索远程内容时有类似的问题。

var coolCatsField = '<div class="field">';
        coolCatsField += '<label for="cool_cat_search">Find a cool cat:</label>';
        coolCatsField += '<select id="cool_cat_search" class="ui fluid search selection dropdown" name="query"><option value="">Start typing to search or add</option></select>';
    coolCatsField += '</div>';

我还尝试直接在 .search 输入上使用语义 UI 的 .api() 方法,它成功地自动替换了路由中的 {value} 并检索了服务器响应,但未能将这些结果附加到下拉列表中,即使我指定了 stateContext 属性:

$('.cool_cat_search .search')
    .api({
        action       : 'find cool cats',
        stateContext : '.cool_cat_search' // UI state will be applied to the dropdown element, defaults to triggering element.
    });

因此,我无法自动替换路由 {value},也无法使用 urlData 属性手动设置它。文档含糊不清,但它在那里有效,所以我想我做错了什么;非常感谢您抽出宝贵时间,很抱歉我无法提供 JSFiddle 来使用,但也许您会发现某个地方有错误。

最佳答案

我最近遇到了完全相同的问题,但由于时间有限没有时间提交错误报告。我设法在 jsfiddle 上复制了你的问题,我让它工作的唯一方法是在发送请求之前覆盖设置对象:

$('.ui.dropdown')
  .dropdown({
    apiSettings: {
        action   : 'find cool cats',
        throttle: 500,
        beforeSend: function(settings) {
            settings.urlData = {
                value: $('.ui.dropdown .search').val()
            };

            return settings;
        }
    }
  });

http://jsfiddle.net/Lwwonzte/

关于javascript - 远程加载下拉选项时,语义 UI 不会替换 GET 路由中的 {value},我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33072593/

相关文章:

javascript - jQuery 单击事件不显示并隐藏输入

semantic-ui - 语义 ui 中的固定宽度内容

javascript - jQuery -.on ("click") 无法在移动设备上运行

javascript - Android 在webview中注入(inject)外部js,执行函数,并引发警报

javascript - 使用 jquery 和 HTML5 数据属性为背景颜色设置动画

html - 带有 Swiper 的 div 旁边的固定宽度 div 会导致奇怪的行为

javascript - 更改 React 中 onChange 的 props

css - 语义 UI 网格 : Spanning columns in a grid with different counts per row

Semantic-UI-React 进度条自定义着色

javascript - 使用 javascript 正则表达式翻译 html