Я искал в Интернете какое-то время, и все же я не могу найти ответ, у меня есть три раскрывающихся меню на моем сайте.
Я использую их для принятия пользовательских настроек, чтобы пользователь мог контролировать вывод результатов.
Поэтому я хочу знать, возможно ли, чтобы значение было выведено из других 2 выпадающих списков, если оно выбрано в одном.
например, если пользователь выбирает фильмы в первом, они не будут в других.
вот мои выпадающие списки
<select id="pref1select">
<option value="P">Preference One</option>
<option value="M">Movie</option>
<option value="T">Tv</option>
<option value="G">Games</option>
</select>
<select id="pref2select">
<option value="P">Preference Two</option>
<option value="M">Movie</option>
<option value="T">Tv</option>
<option value="G">Games</option>
</select>
<select id="pref3select">
<option value="P">Preference Three</option>
<option value="M">Movie</option>
<option value="T">Tv</option>
<option value="G">Games</option>
</select>
Это отключит его, но не удалит.
Скрипт: http://jsfiddle.net/p2SFA/1/
HTML: (добавлен класс .preferenceSelect
)
<select id="pref1select" class="preferenceSelect">
<option value="P">Preference One</option>
<option value="M">Movie</option>
<option value="T">Tv</option>
<option value="G">Games</option>
</select>
<select id="pref2select" class="preferenceSelect">
<option value="P">Preference Two</option>
<option value="M">Movie</option>
<option value="T">Tv</option>
<option value="G">Games</option>
</select>
<select id="pref3select" class="preferenceSelect">
<option value="P">Preference Three</option>
<option value="M">Movie</option>
<option value="T">Tv</option>
<option value="G">Games</option>
</select>
JQuery:
$(document).ready(function() {
$(".preferenceSelect").change(function() {
// Get the selected value
var selected = $("option:selected", $(this)).val();
// Get the ID of this element
var thisID = $(this).prop("id");
// Reset so all values are showing:
$(".preferenceSelect option").each(function() {
$(this).prop("disabled", false);
});
$(".preferenceSelect").each(function() {
if ($(this).prop("id") != thisID) {
$("option[value='" + selected + "']", $(this)).prop("disabled", true);
}
});
});
});
Если вы хотите, чтобы это было удалено, вам, вероятно, придется сделать jQuery знанием того, что нужно вставить, когда он сбрасывается, потому что сделан новый выбор :)
Это должно сработать для вас:
$(document).ready(function() {
$(".preferenceSelect").change(function() {
// Get the selected value
var selected = $("option:selected", $(this)).val();
// Get the ID of this element
var thisID = $(this).attr("id");
// Reset so all values are showing:
$(".preferenceSelect option").each(function() {
$(this).show();
});
$(".preferenceSelect").each(function() {
if ($(this).attr("id") != thisID) {
$("option[value='" + selected + "']", $(this)).hide();
}
});
});
});'
Вы должны попробовать следующее:
$(".preferenceSelect").on("change", function () {
$(".preferenceSelect option").prop("disabled", false);
var selectPref = $("option:selected", $(this)).val();
var selectId = $(this).prop("id");
$(".preferenceSelect option").each(function () {
$(this).show();
});
$(".preferenceSelect").each(function () {
if ($(this).prop("id") != selectId) {
$("option[value='" + selectPref + "']", $(this)).prop("disabled", true);
}
});
});
Это должно быть для вас.
Я считаю, что что-то подобное сделало бы трюк, учитывая HTML выше:
var $selects = $("select");
$selects.on("change", function(){
var value = this.value;
$("option[value='" + value +"']", $selects).prop("disabled", true);
});
Это, очевидно, отключает дубликаты параметров, но это легко изменить, чтобы удалить их. Однако вы столкнетесь с небольшой проблемой, поскольку параметры "Предпочтения №" имеют одинаковое значение. Я бы рекомендовал либо сделать эти метки optgroup
либо полностью удалить значения, и пометить их как отключенные с самого начала... так как вы не сможете их щелкнуть в первую очередь. Вы можете найти немного больше опций меток и разделителей ответы здесь.
attr
в этом случае: stackoverflow.com/questions/5874652/prop-vs-attr