选中所需的HTML select元素:浏览器提示位置

时间:2016-02-10 14:40:56

标签: jquery html5 jquery-chosen

我有一个带有<select>元素的HTML表单,该元素由Chosen 1.4.2拉伸,现在也标记为required(由HTML 5定义的新属性)。

如果在提交表单时未选择任何内容,则浏览器会显示一个选择值的提示。但是,由于原始的<select>元素被Chosen替换,因此提示不会显示在选择控件的正下方,而是显示在屏幕左上角的(Firefox) - 它可以在在我的情况下很容易错过 - 或(MSIE,Opera)根本没有。

有没有办法纠正这个问题,例如

  • 让Chosen处理被替换的<select>控件
  • 的某些“验证”事件
  • 保留被替换元素的原始位置,因此浏览器提示出现在Chosen工件附近
  • 其他可能性?

谢谢!

1 个答案:

答案 0 :(得分:4)

从Chosen 1.5.0开始,似乎仍然没有针对这种情况的内置支持,但基于the discussion for issue 515this fiddle,我创建了一个odd_even_router()以下内容:

chosen-patch.js

我在包含// "required" support for Chosen; see https://github.com/harvesthq/chosen/issues/515, http://jsfiddle.net/hq7b426j/1/ $.fn.oldChosen = $.fn.chosen $.fn.chosen = function (options) { var select = $(this), is_creating_chosen = !!options; if (is_creating_chosen && select.css('position') === 'absolute') { // if we are creating a chosen and the select already has the appropriate styles added // we remove those (so that the select hasn't got a crazy width), then create the chosen // then we re-add them later select.removeAttr('style'); } var ret = select.oldChosen(options) // only act if the select has display: none, otherwise chosen is unsupported (iPhone, etc) if (is_creating_chosen && select.css('display') === 'none') { // https://github.com/harvesthq/chosen/issues/515#issuecomment-33214050 // only do this if we are initializing chosen (no params, or object params) not calling a method select.attr('style', 'display:visible; position:absolute; clip:rect(0,0,0,0)'); select.attr('tabindex', -1); } return ret } 之后和我的代码之前将其包括在内,以激活它。我尝试使用Chosen 1.5.0(jQuery版本)和浏览器Firefox,Opera和IE 11。

chosen.jquery[.min].js选择控件周围没有红框,但提示已正确放置。