JQuery :仅当 selected 元素是第一个元素(占位符)时,才将所有 select 元素设置为斜体
JQuery : Style all select elements to italic only if the selected element is the first one (placeholder)
我正在尝试使用 JQuery 以不同方式设置占位符的样式。我可以像这样轻松地一次完成一个元素:
<script type="text/javascript">
$(document).ready(
function() {
var cabinetFilter = document.getElementById("cabinetFilter");
var value = cabinetFilter.options[cabinetFilter.selectedIndex].value;
if (value == "") {
$(cabinetFilter).css('font-style', 'italic');
$(cabinetFilter).css('color', '#636c72');
$(cabinetFilter).children().css('font-style', 'normal');
} else {
$(cabinetFilter).css('font-style', 'normal');
$(cabinetFilter).css('color', 'black');
$(cabinetFilter).children().css('font-style', 'normal');
}
}
);
</script>
这只适用于一个 select 元素,但我有 3 或 4 个页面。我知道您可以使用类似这样的方法定位所有 selects :
<script type="text/javascript">
$(document).ready(
function() {
$('select').css('font-style', 'italic');
}
);
</script>
有问题的 select 元素如下所示:
<select class="form-control" id="cabinetFilter" name="cabinetFilter" th:value="${cabinetFilter}"
onchange="this.form.submit()">
<option value="">Search Cabinet</option>
<option th:each="cabinet : ${cabinets}" th:value="${cabinet.id}"
th:text="${cabinet.toString()}" th:selected="${cabinet.id == cabinetFilter}">
</option>
</select>
我如何调整第二个示例并告诉它仅在第一个元素被 selected 时应用样式?
根据您的第一个示例和要求,我假设您想迭代 select
DOM 个元素并检查是否选择了一个值。
你可以用 each loop:
function checkSelectElements()
{
$('select').each(function (index, value){
if($(this).val()===""){
$(this).css('font-style', 'italic');
$(this).css('color', '#636c72');
$(this).children().css('font-style', 'normal');
}
else
{
$(this).css('font-style', 'normal');
$(this).css('color', 'red');
$(this).children().css('font-style', 'normal');
}
});
}
如果您希望它在有人更改 select 语句中的选项时更改。你可以做的是:
// When a select statement changes check if the option selected has a value of ""
// If so give it an italic style. If not, set it to normal
$(document).on('change', 'select', function() {
if($(this).val() == '') {
$(this).css({'font-style':'italic'});
} else {
$(this).css({'font-style':'italic'});
}
});
如果你想从页面加载中得到它,我推荐阿隆阿德勒的答案。
我建议对任何样式使用 CSS class。这就是 "style sheets" 的用途。然后,只需要一个函数,从每个 select 中删除 class,然后将其添加回具有第一个选项 select 的那些。 (如果需要,您可以使用 :first-child
而不是 [value=""]
。
function updateSelects() {
$('select').removeClass('unselected');
$('select').has('option[value=""]:selected').addClass('unselected');
}
$('select').on('change', updateSelects);
updateSelects();
.unselected {
font-style: italic;
color: #636c72;
}
.unselected option {
font-style: normal;
color: #000;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<select>
<option value="">Select something</option>
<option value="1">Something</option>
</select>
<select>
<option value="">Select something</option>
<option value="1">Something</option>
</select>
<select>
<option value="">Select something</option>
<option value="1">Something</option>
</select>
<select>
<option value="">Select something</option>
<option value="1">Something</option>
</select>
我看到您正在使用 Thymeleaf, if so, then you can also use ,不需要任何其他 JavaScript。
通过添加 th:style="${cabinetFilter==''} ? 'font-style:italic' : 'font-style:normal'"
更改您的 select(我在这里假设您的默认值为空字符串,如果它是 NULL,您应该检查 ${cabinetFilter==NULL}
.
<select class="form-control" id="cabinetFilter" name="cabinetFilter" onchange="this.form.submit()"
th:value="${cabinetFilter}"
th:style="${cabinetFilter==''} ? 'font-style:italic' : 'font-style:normal'" >
<option value="">Search Cabinet</option>
<option
th:each="cabinet : ${cabinets}"
th:value="${cabinet.id}"
th:text="${cabinet.toString()}"
th:selected="${cabinet.id == cabinetFilter}">
</option>
</select>
不要忘记添加一点 css 以将选项文本恢复为非斜体:
<style>
select > option{
font-style: normal;
}
</style>
我正在尝试使用 JQuery 以不同方式设置占位符的样式。我可以像这样轻松地一次完成一个元素:
<script type="text/javascript">
$(document).ready(
function() {
var cabinetFilter = document.getElementById("cabinetFilter");
var value = cabinetFilter.options[cabinetFilter.selectedIndex].value;
if (value == "") {
$(cabinetFilter).css('font-style', 'italic');
$(cabinetFilter).css('color', '#636c72');
$(cabinetFilter).children().css('font-style', 'normal');
} else {
$(cabinetFilter).css('font-style', 'normal');
$(cabinetFilter).css('color', 'black');
$(cabinetFilter).children().css('font-style', 'normal');
}
}
);
</script>
这只适用于一个 select 元素,但我有 3 或 4 个页面。我知道您可以使用类似这样的方法定位所有 selects :
<script type="text/javascript">
$(document).ready(
function() {
$('select').css('font-style', 'italic');
}
);
</script>
有问题的 select 元素如下所示:
<select class="form-control" id="cabinetFilter" name="cabinetFilter" th:value="${cabinetFilter}"
onchange="this.form.submit()">
<option value="">Search Cabinet</option>
<option th:each="cabinet : ${cabinets}" th:value="${cabinet.id}"
th:text="${cabinet.toString()}" th:selected="${cabinet.id == cabinetFilter}">
</option>
</select>
我如何调整第二个示例并告诉它仅在第一个元素被 selected 时应用样式?
根据您的第一个示例和要求,我假设您想迭代 select
DOM 个元素并检查是否选择了一个值。
你可以用 each loop:
function checkSelectElements()
{
$('select').each(function (index, value){
if($(this).val()===""){
$(this).css('font-style', 'italic');
$(this).css('color', '#636c72');
$(this).children().css('font-style', 'normal');
}
else
{
$(this).css('font-style', 'normal');
$(this).css('color', 'red');
$(this).children().css('font-style', 'normal');
}
});
}
如果您希望它在有人更改 select 语句中的选项时更改。你可以做的是:
// When a select statement changes check if the option selected has a value of ""
// If so give it an italic style. If not, set it to normal
$(document).on('change', 'select', function() {
if($(this).val() == '') {
$(this).css({'font-style':'italic'});
} else {
$(this).css({'font-style':'italic'});
}
});
如果你想从页面加载中得到它,我推荐阿隆阿德勒的答案。
我建议对任何样式使用 CSS class。这就是 "style sheets" 的用途。然后,只需要一个函数,从每个 select 中删除 class,然后将其添加回具有第一个选项 select 的那些。 (如果需要,您可以使用 :first-child
而不是 [value=""]
。
function updateSelects() {
$('select').removeClass('unselected');
$('select').has('option[value=""]:selected').addClass('unselected');
}
$('select').on('change', updateSelects);
updateSelects();
.unselected {
font-style: italic;
color: #636c72;
}
.unselected option {
font-style: normal;
color: #000;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<select>
<option value="">Select something</option>
<option value="1">Something</option>
</select>
<select>
<option value="">Select something</option>
<option value="1">Something</option>
</select>
<select>
<option value="">Select something</option>
<option value="1">Something</option>
</select>
<select>
<option value="">Select something</option>
<option value="1">Something</option>
</select>
我看到您正在使用 Thymeleaf, if so, then you can also use
通过添加 th:style="${cabinetFilter==''} ? 'font-style:italic' : 'font-style:normal'"
更改您的 select(我在这里假设您的默认值为空字符串,如果它是 NULL,您应该检查 ${cabinetFilter==NULL}
.
<select class="form-control" id="cabinetFilter" name="cabinetFilter" onchange="this.form.submit()"
th:value="${cabinetFilter}"
th:style="${cabinetFilter==''} ? 'font-style:italic' : 'font-style:normal'" >
<option value="">Search Cabinet</option>
<option
th:each="cabinet : ${cabinets}"
th:value="${cabinet.id}"
th:text="${cabinet.toString()}"
th:selected="${cabinet.id == cabinetFilter}">
</option>
</select>
不要忘记添加一点 css 以将选项文本恢复为非斜体:
<style>
select > option{
font-style: normal;
}
</style>