- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用由 dojox.data.QueryReadStore
支持的 dijit.form.FilteringSelect
以允许用户选择区域(考虑“自动完成” “机制)。在用户输入的每个字符上,QueryReadStore
向服务器发送一个请求,等待匹配区域(具有相关 ID)的 json 列表。在显示足够短的列表时,用户可以选择所需的项目。 [不可否认,查询每次击键并不是最有效的模式,但现在已经足够了。]
意外行为:在一些罕见但特定的情况下,用户做出的选择“不会坚持”。例如,如果用户键入“can
”,她会按顺序看到以下选项:
Atlantic Canada
Canada
English Canada
Lower Canada
Upper Canada
Western Canada
如果她在其中选择“Canada
”,dijit 会关闭下拉选择,并正确选择她的选择。但是当用户离开该字段时,选择会切换到“Atlantic Canada
”!
这种奇怪的现象系统地发生在少数特定地区。 (起初,我认为这些表现不佳的地区之间的共同因素是它们的名称包含重音字符或连字符,但加拿大的例子显然不是这样。到目前为止,我未能发现规律。)
我在任何地方都没有发现任何类似问题的提及。我非常愿意进行调查,但是,由于我是 dojo 的新手,在我开始深入研究 dojo 的代码之前,我非常感谢您的指点:我应该先看哪里?可能导致该行为的一些可能问题是什么?我可以排除某些假设吗?我应该如何最好地使用控制台(或 Firebug)来深入了解这个问题?等
dojo 1.1.1 和 dojo 1.2.3 都会出现此问题。
这是 FilteringSelect
的(编程)生成:
new dijit.form.FilteringSelect({
name = "region";
autoComplete = false;
hasDownArrow = false;
labelAttr = "name";
queryExpr = "${0}";
store = new dojox.data.QueryReadStore({url:'/query/regions'});
}, myNode);
编辑(2009/02/18):其他详细信息
根据 damelin 的回答,我想了解 FilteringSelect
对这种情况的看法。假设我将日志记录函数连接到 FilteringSelect
的事件 onChange
和 onBlur
,我得到以下逐个播放序列:
can
Canada
”(这是 id 为 1 的区域)我按 Enter
(从而选择商店的商品)。下拉列表现在已经消失,文本“Canada
”出现在字段中。此时,第一个事件被触发,记录如下:
onChange event: region 1
我按 tab
键离开了该字段。在这里,两个事件按以下顺序依次触发:
onBlur event: region 1
onChange event: region 246
(区域 246 是 Atlantic Canada
。)这很有趣……当我离开该字段 (onBlur) 时,Canada
仍然是所选值。神秘的交换只在那之后发生......
最佳答案
我想我终于找到了这种行为的解释。简而言之,这是由于 FilteringSelect 从 QueryReadStore 期望的契约(Contract)未履行而发生的。由于 QueryReadStore 完全依赖服务器模块的响应,它生成 json,因此由于服务器的意外响应而无法履行契约(Contract)。
正如我发现的那样,在用户输入结束时 FilteringSelect 期望 Store(在本例中为 QueryReadStore)仅返回与输入或选择的字符串完全匹配的项目。 FilteringSelect 认为输入在按下回车键或用户离开字段时结束。在这两个事件之前,输入或选择的文本只是文本。目前实际上没有选择任何项目。
换句话说,在输入结束时,FilteringSelect 期望 Store 返回零个项目(如果不应选择任何项目)或一个项目(应该选择)。因此,当您提供区域列表时,FilteringSelect 无法确定选择哪个区域,并会停在第一个区域。
正如您提到的,QueryReadStore 在每次击键时发送请求。在这种情况下(在输入结束之前)FilteringSelect 期望 Store 返回匹配模式的项目。默认模式是“enteredString*”,其中星号是任何序列。
为了区分两种情况,QueryReadStore 请求略有不同:
如您所见,在第二个请求中,“enteredString”的末尾没有星号。这种变化有助于在服务器端建立正确的响应。
希望我已经解释清楚了。如果没有,欢迎您提问。
关于json - FilteringSelect 与 QueryReadStore : selection doesn't stick,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/472059/
我想在设置 displayValue 后更新 FilteringSelect 中的下拉列表。我知道 FilteringSelect 在设置 displayValue 后从结果中选择了第一个元素,但是当
以下代码适用于文本框,我可以用自己的代码覆盖默认验证器函数并强制它返回 false,使输入无效。但是,这对 FilteringSelect 输入根本不起作用。以下代码始终返回 true - 事实上它从
我有一个典型的 FilteringSelect,当我输入它时它就可以工作,并且我可以从框中检索值,这很好。但是,我正在尝试确定是否可以访问它返回的项目列表。 例如,如果我的商店中有以下商品: appl
我有一个选择字段,其中我的选项值超过大约 250 个字符,这就是用户无法读取选择框中的值的原因。 有什么方法可以使选择成为水平滚动,或者我可以换行文本。 最佳答案 您可以使用 style 属性指定框的
在你问之前,在这种情况下,多重选择对于用户来说并不是很直观。 我有一个对象,其中一个数组作为“items”的值,该对象在页面上的 var 语句中提供。我还有一个函数可以生成并放置 dijit.form
我刚刚开始尝试将 Dojo 与 ESRI ArcGIS Server 一起使用。我尝试了一些教程,但在使用 Dojo FilteringSelect Dijit 时遇到了问题。 我的代码的相关部分:
我使用 dojo.form.FilteringSelect 作为类似 google 的建议器。根据输入的字符串,我通过 AJAX 获取值列表并将它们放入小部件的存储中。此过程在每次 keyUp 之后启
我正在尝试修改 Dojo FilteringSelect 以禁止在其中输入内容。我知道我可以轻松做到 postCreate: function() { this.inherited(arg
我为 EPiServer 开发了一个 dijit 小部件。在小部件中,有一个 FilteringSElect 可以从 REST 存储中获取数据。填充 FilteringSelect 的值是数字 Id
dijit.form.FilteringSelect 接近我需要的。我已经尝试了很多方法来做我想做的事,但作为一个 dijit 初学者,我永远不知道我是否朝着正确的方向前进。 当我开始在 Filter
我在使 dijit/form/FilteringSelect 小部件自行运行时遇到问题。我怀疑我的选项组合刚刚好,但我似乎无法找到正确的模式。 我的数据源是一个书名列表,我希望用户能够通过下拉菜单并选
我正在使用 dojo 的相同代码 documentation 刚刚下载的代码工作正常,但我的项目没有触发 onchange 事件。 我已经通过触发 onblur onBlur: function(){
我有一个从 创建的 DoJo FilteringSelect . 如何动态禁用一个(未选中的)选项? 谢谢 UPD:当 FilteringSelect 由 PARSE 创建时,是否可以删除此元素?
我尝试使用以下函数从 dijit.form.filteringselect 中删除所有选项并向 dijit.form.filteringselect 添加一个选项。但是,我收到一个错误:没有方法 ge
我有一个 dijit.form.FilteringSelect 组件,我想动态更改选项。但是我从 dijit.form.FilteringSelect 及其商店属性中获得了商店;商店中没有 sette
下面是填充了用户数据的 filteringSelect 示例。我的目标是对显示的值执行通配符匹配。例如,如果用户键入“son”,则下拉匹配项将是“homer simpSON”和“carl calSON
我正在使用由 dojox.data.QueryReadStore 支持的 dijit.form.FilteringSelect 以允许用户选择区域(考虑“自动完成” “机制)。在用户输入的每个字符上,
我在 Zend 表单上一起使用了 dojo FilteringSelect 元素,但我无法让它按我的意愿工作。我有一个包含三个字段的商店 id , label , name .标签将用于下拉菜单,应为
我需要帮助从 FilteringSelect 中删除所有选项。 select的html代码: Izberi... dobiVseKat
我有 Dijit.form.FilteringSelect,它从下拉列表的 Web 服务内容动态加载。 我想预选第一个元素。我该怎么做? 最佳答案 这取决于您的实现。 如果您首先加载数据,然后创建 d
我是一名优秀的程序员,十分优秀!