我喜欢 Chosen,但是因为我使用了很多 ajax 和隐藏面板,所以我在 Chosen 呈现零宽度选择时遇到了地狱般的问题,显然是因为在选择可见之前计算了宽度。
我添加了一行似乎可以解决此问题(或提供解决方法),至少在我的情况下是这样。
在Chosen.prototype.set_up_html函数中,在“this.f_width = this.form_field_jq.outerWidth();”之后,添加:
if (this.f_width==0) this.f_width = this.form_field_jq.css("width");
显然,这仅在 css 中明确设置宽度时才有效。 但就我而言,它解决了问题。 更好的修复将受到欢迎。
重复#92。
我必须在修复时进行此更改:
if (/px/.test(this.form_field_jq.css("width"))){
this.f_width = this.form_field_jq.css("width").replace("px", "");
} 别的 {
this.f_width = this.form_field_jq.css("width");
}
因为 this.form_field_jq.css("width"); 最后用 px 返回宽度
我有一个解决方案,这在我的项目中运行良好:
this.f_width = this.form_field_jq.outerWidth(); // 在 selected.jqeury.js 的这一行下添加以下代码
if (this.f_width==0){
var cloneObj= this.form_field_jq.clone();
cloneObj.removeAttr('id');
$(document.body).append(cloneObj);
var w = cloneObj.width();
cloneObj.remove();
this.f_width=w;
}
希望这对某人有所帮助,因为它在我的项目中运行良好。
我刚刚添加了以下 CSS 规则:
.chosen-container
{
width: 100% !important;
}
谢谢法比奥杜克! 为 selected-container 设置 css 解决了我的问题!
你真的不需要在 CSS 中设置宽度。 当您初始化 Chosen 时,您可以正确地做到这一点。
$(".chosen-select").chosen({ width: '100%' }); // any acceptable CSS width will work
实际上,我创建了一个 KO bindingHandler 来生成我选择的元素,并不是所有的元素都有 100% 的宽度,所以 CSS 是我的选择。 尽管我可以在我的 bindingHandler 中将宽度设置为一个选项。
谢谢@fabioduque它也对我
@pfiller ,谢谢! 那解决了我的问题。
为什么有时会发生这种情况? :(
我使用了 css 方法,因为我不想查看我选择的所有地方(其他开发人员在构建新视图时可能会遇到同样的问题)。 所以css全局修复了这个问题。 谢谢@fabioduque
我在我的一个 WordPress 插件中使用条件逻辑遇到了这个问题......特别是宽度设置为 0px ......即使在 init 之后(我用chosen:ready
选择的字段排入队列,所以如果它已经是 init并且我隐藏了父 div) ...但无论如何,这是我用来解决此问题的方法,当我的 jQuery 代码运行以在执行chosen:updated
之前显示父 DIV 元素时
// This is the original select field
$field = $( '#' + field );
// This is the select field wrapper that I hide (just shown for reference)
$( '.fieldset-' + field ).show();
// Chosen container ID will be original select element ID + _chosen
var $chosen_container = $( '#' + field + '_chosen' );
if( $chosen_container && $chosen_container.width() === 0 ){
$chosen_container.css( 'width', '100%' );
}
$field.trigger( 'chosen:updated' );
如果其他人仍然遇到此问题,请检查您何时调用 $(".chosen-select").chosen()。 我在页面加载时有一个 javascript 函数调用列表,当我将 .chosen() 调用移动到列表顶部时,它正确应用了宽度,不再是零宽度。 我把它移到上面的函数是检索一些数据并执行大量的 dom 操作。
为什么我有 2 个搜索图标,我尝试了上述两种解决方案-
最有用的评论
希望这对某人有所帮助,因为它在我的项目中运行良好。
我刚刚添加了以下 CSS 规则: