我一直试图为显示扩展名的电话号码扩展名设置一个下拉列表(只是+ xxx,例如+44),而下拉列表则包含更具描述性的文字,例如&# 34;英国(+44)"代替。
我设法取得了一些进展,但是当我选择一个项目重新打开下拉列表时,我无法恢复文本。下拉列表将显示正确的值,但选项列表仍将显示数字(但是,它在firefox中工作正常,但至少不是chrome / IE)
我很感激为实现这一目标可以采取的任何帮助,最好是在仍然使用“标准”的情况下。输入控制。
当前代码/ jsFiddle:
var toggled = 1;
$(function(){
$("#ddMobileExtension option").each(function () {
// Set data item for all options
$(this).data("data-txt", $(this).text());
});
$("#ddMobileExtension").change(function () {
$("option", this).each(function () {
// Reset all options to their corresponding data items
$(this).text($(this).data("data-txt"));
});
// Set the selected option to be +XX
// (Provided it's not the first item)
$(this).find("option:selected").text(
$(this).find("option:selected").attr("value") != "-1" ? "+" + $(this).find("option:selected").attr("value") : ""
);
});
$("#ddMobileExtension").on("click", function(e){
if(toggled == 1){
// On dropdown being opened, set the option text back
// to the more readable form
$(e.target).find("option:selected").text($(e.target).find("option:selected").data("data-txt"));
toggled = 0;
} else {
// On dropdown being closed, set the option text back
// to the +XX format
$(this).find("option:selected").attr("value") != "-1" ? $(e.target).find("option:selected").text("+" + $(this).find("option:selected").attr("value")) : "";
toggled = 1;
}
}).blur(function(){
// Catch for tabbing out and back in mid-selection
toggled = 1;
});
});
<select ID="ddMobileExtension" style="width:61px">
<option Value="-1" Text="" />
<option Value="44">United Kingdom (+44)</option>
<option Value="1">United States (+1)</option>
<option Value="1784">Saint Vincent and the Grenadines (+1784)</option>
<option Value="976">Mongolia (+976)</option>
</select>
答案 0 :(得分:1)
只需在选定的label attribute
中添加和删除option element
即可。我们应该使用mousedown event
来避免在选择项目重新打开下拉列表时使文本恢复的问题。使用click event
时,实际上需要花时间更新选项。单击选择框时,在DevTools中检查这些内容。
它在firefox,chrome和IE中运行良好。
最终固定代码:jsFiddle
$(function() {
$("#ddMobileExtension").change(function() {
var label = $(this).find("option:selected")[0].label;
$($(this).find("option:selected")[0]).attr("label", label.substring(label.indexOf("(") + 1, label.indexOf(")")));
});
$("#ddMobileExtension").mousedown(function(e) {
var rem = document.querySelector('option[label]')
if (rem) {
rem.removeAttribute("label")
}
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select ID="ddMobileExtension" style="width:61px">
<option Value="-1" Text="" />
<option Value="44">United Kingdom (+44)</option>
<option Value="1">United States (+1)</option>
<option Value="1784">Saint Vincent and the Grenadines (+1784)</option>
<option Value="976">Mongolia (+976)</option>
</select>
答案 1 :(得分:1)
这是我要做的,使用jQuery UI Autocomplete:
https://jsfiddle.net/Twisty/3nxu01vg/4/
<强> HTML 强>
var extensions = [{
label: "United Kingdom (+44)",
value: 44
}, {
label: "United States (+1)",
value: 1
}, {
label: "Saint Vincent and the Grenadines (+1784)",
value: 1784
}, {
label: "Mongolia (+976)",
value: 976
}];
$(function() {
$("#ddMobileExtension").autocomplete({
source: extensions,
minLength: 0
}).click(function() {
$(this).trigger("keydown");
});
});
<强>的JavaScript 强>
option
这就像你描述的方式一样。
如果您不想这样做,可以按照建议进行操作,方法是在选择后更改<select ID="ddMobileExtension" style="width:61px">
<option value="-1"></option>
<option value="44" data-orig-text="United Kingdom (+44)">United Kingdom (+44)</option>
<option value="1" data-orig-text="United States (+1)">United States (+1)</option>
<option value="1784" data-orig-text="Saint Vincent and the Grenadines (+1784)">Saint Vincent and the Grenadines (+1784)</option>
<option value="976" data-orig-text="Mongolia (+976)">Mongolia (+976)</option>
</select>
的文字。
https://jsfiddle.net/Twisty/3nxu01vg/9/
<强> HTML 强>
$(function() {
$("#ddMobileExtension").focus(function(e) {
var $items = $(this).find("option");
$items.each(function(ind, elem) {
if (ind !== 0) {
$(elem).html($(elem).data("orig-text"));
}
});
}).change(function(e) {
var $item = $(this).find(":selected");
if ($item.index() !== 0) {
$item.html($item.val());
}
$(this).trigger("blur")
});
});
<强>的JavaScript 强>
blur
希望有所帮助。
IE 8的更新 - &gt; 11 强>
此代码在Internet Explorer中的运行方式不同。这将在Edge中运行。
查看更多:https://github.com/jquery/jquery/issues/2511
不幸的是,所有版本的IE(甚至是IE 11)都会触发
focus
&amp;class ViewController: UIViewController { @IBOutlet weak var segmentedControl: UISegmentedControl! @IBAction func segmentSelected(_ sender: UISegmentedControl) { UserDefaults.standard.set(sender.selectedSegmentIndex, forKey: "chosenLanguage") } override func viewDidLoad() { super.viewDidLoad() if let value = UserDefaults.standard.value(forKey: "chosenLanguage"){ let selectedIndex = value as! Int segmentedControl.selectedSegmentIndex = selectedIndex } } }
事件是异步的,没有简单的方法可以解决它在jQuery中包含变通方法的问题。好消息是它已在新的Microsoft Edge浏览器中修复,但IE 11将永远保留。