- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我的任务是创建一个包含 3 列(每行)的下拉列表,如下图所示。
现在,我意识到 jQuery UI 的 Selectmenu 小部件可以满足我的要求,因此,我使用了以下代码(在 their official documentation page 上给出)。
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>selectmenu demo</title>
<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/smoothness/jquery-ui.css">
<style>
label { display: block; }
select { width: 200px; }
.overflow { height: 200px; }
</style>
<script src="//code.jquery.com/jquery-1.12.4.js"></script>
<script src="//code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
</head>
<body>
<label for="number">Select a number:</label>
<select name="number" id="number">
<option value="1">1</option>
<option value="2" selected>2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
<option value="8">8</option>
<option value="9">9</option>
<option value="10">10</option>
<option value="11">11</option>
<option value="12">12</option>
<option value="13">13</option>
<option value="14">14</option>
<option value="15">15</option>
<option value="16">16</option>
<option value="17">17</option>
<option value="18">18</option>
<option value="19">19</option>
</select>
<script>
$( "#number" )
.selectmenu()
.selectmenu( "menuWidget" )
.addClass( "overflow" );
</script>
</body>
</html>
问题是我想创建 3 列而不是 1 个默认列。因此,我尝试了两种选项来对齐选项标签内的文本内容。
下面是我试过的代码。
<option value="1">
<span align="left">Apple</span>
<span align="center">Mango</span>
<span align="right">Orange</span>
</option>
<option value="2" selected>
<table>
<tr>
<td align="left">1</td>
<td align="center">2</td>
<td align="right">3</td>
</tr>
</table>
</option>
但这并没有解决我的问题,因为我得到的输出如下图所示。
由于我是 HTML、CSS 和 jQuery 的初学者,因此,我不知道下一步该怎么做才能创建一个每行包含 3 列的下拉列表。请注意,我将选择包含所有 3 列的整行(如下图所示),而不是任何特定列的任何单元格。任何人都可以建议如何解决此问题并创建下拉列表如第一张图片所示?
最佳答案
首先,我们要创建一个合适的 HTML 结构。有一个 select 元素你会想了解:<optgroup>
.这是一个基本的建议结构。
<label for="options">Select an Option:</label>
<select id="options">
<optgroup label="PREFERRED OPTIONS">
<option value="L">Standard Screw Adjustment</option>
</optgroup>
<optgroup label="STANDARD OPTIONS">
<option value="C">Tamper Resistant - Factory Set</option>
<option value="K">Handknob</option>
</optgroup>
<optgroup label="ADDITIONAL OPTIONS">
<option value="F">Hex Head Screw with Locknut</option>
</optgroup>
</select>
这只是一个开始。您可以使用 $("#options").selectmenu();
你离你想要的更近了。我们仍然需要添加更多元素并合并额外数据。
The selectmenu widget is built with the widget factory and can be extended. When extending widgets, you have the ability to override or add to the behavior of existing methods.
这正是我们要做的,以 .autocomplete()
中的示例为例.请在此处查看此示例:http://jqueryui.com/autocomplete/#categories
我们将在 .selectmenu()
内执行相同类型的覆盖.小部件工厂及其代码有时可能有点高级并且有点难以理解,因此您必须自己深入研究。
HTML
<label for="options">Select an Option:</label>
<select id="options">
<optgroup label="PREFERRED OPTIONS">
<option data-short="L" data-price="$0.00" value="L">Standard Screw Adjustment</option>
</optgroup>
<optgroup label="STANDARD OPTIONS">
<option data-short="C" data-price="$5.00" value="C">Tamper Resistant - Factory Set</option>
<option data-short="K" data-price="$6.00" value="K">Handknob</option>
</optgroup>
<optgroup label="ADDITIONAL OPTIONS">
<option data-short="F" data-price="-$4.00" value="F">Hex Head Screw with Locknut</option>
</optgroup>
</select>
您在上面看到的是我们最初构建的内容的扩展。我添加了 data
属性。它们对我们的 HTML 意义不大,但对我们的 jQuery 很有用。这里的好处是,如果我们遇到不支持 JavaScript 的浏览器(因此无法加载 jQuery 库),代码将回退到基本的 HTML 标记,并且仍然为用户提供类似的体验。
CSS
.ui-selectmenu-category {
color: #5F5F5F;
padding: .5em .25em;
}
.ui-menu-item {
}
.ui-menu-item .ui-menu-item-wrapper {
display: inline-block;
padding: 1em 2px;
}
.ui-menu-item .ui-menu-item-wrapper.ui-state-active {
border-width: 1px 0 1px 0;
border-color: #CCCCCC;
background-color: #E4EBF1;
color: #000;
}
.ui-menu-item .ui-menu-item-wrapper.ui-state-active.short {
color: #2E6D99;
}
.ui-menu-item div.ui-menu-item-wrapper {
width: 295px;
}
.ui-menu-item .short {
color: #2E6D99;
font-weight: strong;
width: 30px;
padding-left: .5em;
}
.ui-menu-item .price {
font-weight: strong;
width: 75px;
margin-right: -6px;
}
我们将为 .selectmenu()
覆盖和扩展一些主题元素.这一切只是为了帮助它符合所需的外观和感觉。
JavaScript
$(function() {
$.widget("custom.mySelectMenu", $.ui.selectmenu, {
_renderMenu: function(ul, items) {
var that = this,
currentCategory = "";
$.each(items, function(index, item) {
var li, name, short, price;
if (item.optgroup != currentCategory) {
ul.append("<li class='ui-selectmenu-category'>" + item.optgroup + "</li>");
currentCategory = item.optgroup;
}
li = that._renderItemData(ul, item);
console.log(ul);
name = li.text();
short = item.element.data("short");
price = item.element.data("price");
console.log(li, short, price);
li.prepend($("<span>", {
class: "short"
}).html(short));
li.append($("<span>", {
class: "price"
}).html(price));
if (item.optgroup) {
li.attr("aria-label", item.optgroup + " : " + item.label);
}
});
}
});
$("#options").mySelectMenu({
width: 400
});
});
工作示例: https://jsfiddle.net/Twisty/sn1z5vzn/7/
这里是我们将 $.ui.selectmenu
带到的地方并将其扩展到我们自己的用途。你可以看到我们只为 _renderMenu
编写了一个函数。扩展点。选择菜单的其他所有内容都将保持不变。
这很重要,因为我们需要定义一个 width
选项。我们需要知道宽度,以便我们可以从本质上创建适当的列。
这将遍历每个 items
并创建 li
与 ul
一起使用的元素这是由 selectmenu 创建的。生成的元素将如下所示:
<li aria-label="PREFERRED OPTIONS : Standard Screw Adjustment" class="ui-menu-item">
<span class="short ui-menu-item-wrapper ui-state-active" id="ui-id-1" tabindex="-1" role="option">L</span>
<div id="ui-id-2" tabindex="-1" role="option" class="ui-menu-item-wrapper ui-state-active">Standard Screw Adjustment</div>
<span class="price ui-menu-item-wrapper ui-state-active" id="ui-id-3" tabindex="-1" role="option">$0.00</span>
</li>
jQuery UI 为我们做了很多额外的工作,分配唯一的 ID 和应用悬停类等。我们添加的内容允许我们为每个元素的不同部分设置样式和主题。
类别项不想玩好。到目前为止,我发现如果我尝试将任何 HTML 元素添加到其中是 li
,它无法正确呈现菜单的其余部分。我可能会回去看看是否_renderItem
将在这里提供帮助。
很简单,对吧!?如果您有任何问题,请发表评论。
引用资料
更新
如果您像这样更改选项:
<option data-icon-url="https://www.gravatar.com/avatar/b3e04a46e85ad3e165d66f5d927eb609?d=monsterid&r=g&s=16" data-price="$0.00" value="L">Standard Screw Adjustment</option>
然后您可以更新 <span>
将其用作背景。
CSS 片段
.ui-menu-item .icon {
background-repeat: no-repeat;
background-size: 30px;
background-position: center center;
color: #2E6D99;
font-weight: strong;
width: 30px;
padding-left: .5em;
}
JavaScript 代码段
li.prepend($("<span>", {
class: "icon",
style: "background-image: url('" + iconUrl + "')"
}).html(" "));
呈现不间断空格字符。
A common character entity used in HTML is the non-breaking space:
A non-breaking space is a space that will not break into a new line.
Two words separated by a non-breaking space will stick together (not break into a new line). This is handy when breaking the words might be disruptive.
关于jquery - 如何使用 jQuery UI selectMenu 小部件在下拉列表中创建 3 列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47679590/
在带有 jQuery 的 CoffeeScript 中,以下语句有什么区别吗? jQuery ($) -> jQuery -> $ - > 最佳答案 第一个与其他两个不同,就像在纯 JavaScr
已关闭。这个问题是 off-topic 。目前不接受答案。 想要改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 已关闭13 年前。 Improve th
就目前情况而言,这个问题不太适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、民意调查或扩展讨论。如果您觉得这个问题可以改进并可能重新开放,visit
这个问题可能听起来很愚蠢,但请耐心等待,因为我完全是初学者。我下载了两个 jQuery 版本,开发版本和生产版本。我想知道作为学习 jQuery 的初学者,什么更适合我。 最佳答案 如果您对 jQue
The documentation说要使用 1.6.4,但我们现在已经升级到 1.7.2。 我可以在 jQuery Mobile 中使用最新版本的 jQuery 吗? 最佳答案 您当然可以,但如果您想
我在这里看到这个不错的 jquery 插件:prettyphoto jquery lightbox有没有办法只用一个简单的jquery来实现这样的效果。 我只需要弹出和内联内容。你的回复有很大帮助。
很明显我正在尝试做一些 jQuery 不喜欢的事情。 我正在使用 javascript 上传图片。每次上传图片时,我都希望它可见,并附加一个有效的删除脚本。显示工作正常,删除则不然,因为当我用 fir
这两个哪个是正确的? jQuery('someclass').click(function() { alert("I've been clicked!"); }); 或 jQuery('somec
我正在寻找一个具有以下格式的插件 if (jQuery)(function ($) { -- plugin code -- })(jQuery); 我明白 (function ($)
关闭。这个问题是opinion-based 。目前不接受答案。 想要改进这个问题吗?更新问题,以便 editing this post 可以用事实和引文来回答它。 . 已关闭10 年前。 Improv
我知道这个问题已经被问过几次了,但想知道您是否可以帮助我解决这个问题。 背景:我尝试创建一个使用 Ajax 提交的表单(jQuery 表单提交)。我已经工作得很好,然后我想在表单上得到验证。我可以使用
我正在使用无处不在的jquery validate plugin用于表单验证。它支持使用metadata plugin用于向表单元素添加验证规则。 我正在使用此功能。当验证查找这些规则时,它会对元素进
我更喜欢为我一直在开发的网络社区添加实用的视觉效果,但随着事情开始堆积,我担心加载时间。 拥有用户真的更快吗加载(希望是缓存的)副本来自 Google 存储库的 jquery? 是否使用 jQuery
这个问题已经有答案了: Slide right to left? (17 个回答) 已关闭 9 年前。 你能告诉我有没有办法在 jQuery 中左右滑动而不使用 jQuery UI 和 jQuery
我如何找出最适合某种情况的方法?任何人都可以提供一些示例来了解功能和性能方面的差异吗? 最佳答案 XMLHttpRequest 是原始浏览器对象,jQuery 将其包装成一种更有用和简化的形式以及跨浏
运行时 php bin/console oro:assets:build ,我有 11 个这样的错误: ERROR in ../node_modules/jquery-form/src/jquery.
我试图找到 jQuery.ajax() 在源代码中的定义位置。但是,使用 grep 似乎不起作用。 在哪里? 谢谢。 > grep jQuery.ajax src/* src/ajax.js:// B
$.fn.sortByDepth = function() { var ar = []; var result = $([]); $(this).each(function()
我的页面上有多个图像。为了检测损坏的图像,我使用了在 SO 上找到的这个。 $('.imgRot').one('error',function(){ $(this).attr('src','b
我在理解 $ 符号作为 jQuery 函数的别名时遇到了一些麻烦,尤其是在插件中。你能解释一下 jQuery 如何实现这种别名:它如何定义 '$' 作为 jQuery 函数的别名?这是第一个问题。 其
我是一名优秀的程序员,十分优秀!