jquery下拉菜单修改所选文本,但在后续单击时显示先前所选文本的原始值
jquery dropdown modify selected text but display the original value of the previously selected text on a subsequent click
我在Visual Studio 2012中安装了ASP.NET MVC4应用程序,我有一个下拉列表,如下所示:
<select name="ddlID" id="ddlID">
<option value="1">None</option>
<option value="2">White ($4.72)</option>
<option value="3">Black ($5.90)</option>
<option value="4">Blue ($5.90)</option>
</select>
用户从列表中选择一个项目后,如果选择了"白色(4.72美元)",我需要将所选文本的显示更改为"白色",如果选择"黑色(5.90美元)"等,则需要将其更改为"黑色"。
我写了如下的更改:
$('#ddlID').change(function () {
var selText = $('#ddlID option:selected').text();
var i = selText.indexOf(" ");
$('#ddlID option:selected').text(selText.substring(0, i));
});
除了如果用户改变主意并再次单击以选择不同的项目或再次查看列表之外,上面的代码仍然有效,以前选择的项目仍然显示为修改后的文本。例如,如果用户选择"白色(4.72美元)",显示器将正确地变为"白色",但如果用户改变主意,再次点击下拉框以决定他/她想选择哪些,用户会看到以下列表:
None
White
Black ($5.90)
Blue ($5.90)
一旦用户再次点击,我需要将原始列表显示为:
None
White ($4.72)
Black ($5.90)
Blue ($5.90)
请帮忙。
谢谢。。Nam
您可以使用jQuery的data
方法来分配或读取有关元素的一些信息。例如:
$('#elem').data('some-info', 15);
console.log($('#elem').data('some-info')); // 15
在您的情况下,您可以迭代页面加载上的每个选项,并在数据属性中设置其原始文本。然后,在下拉更改事件中,您可以将此数据重新加载到每个选项中,以在更改为新文本之前恢复原始文本。
// sets the original text in a data property for each option
$('#ddlID option').each(function() {
$(this).data('original-text', $(this).text());
});
$('#ddlID').change(function () {
// put back the original text to each option
$(this).find('option').each(function() {
$(this).text($(this).data('original-text'));
});
var selText = $('#ddlID option:selected').text();
var i = selText.indexOf(" ");
$('#ddlID option:selected').text(selText.substring(0, i));
});
现场示例:http://jsfiddle.net/cSnnh/
我会做一些类似的事情
<select name="ddlID" id="ddlID">
<option value="1" data-text="None" data-value="">None</option>
<option value="2" data-text="White" data-value="White ($4.72)">White ($4.72)</option>
<option value="3" data-text="Black" data-value="Black ($5.90)">Black ($5.90)</option>
<option value="4" data-text="Blue" data-value="Blue ($5.90)">Blue ($5.90)</option>
</select>
<script type="text/javascript">
$(function () {
$('#ddlID').change(function () {
$(this).find('option').each(function () {
var obj = $(this);
if (obj.is(':selected'))
{
obj.text(obj.attr('data-text'))
} else {
obj.text(obj.attr('data-value'))
}
});
});
});
</script>
相关文章:
- 为什么在页面上单击的先前链接的文本显示在 AJAX 请求中
- JavaScript NaN错误,输入文本显示为NaN
- 关于socket.io实时文本显示的问题
- 如何使用javascript使文本显示在文本字段中
- 在它们之间切换时,jQuery 文本显示在活动文本下方
- 使用 ajax 乱码文本显示图像
- 带有文本显示js功能的图像映射 - 某些部分不显示
- 来自 Ajax 请求的文本显示不正确
- 如何使用 JavaScript 使文本显示
- 是否可以将元素内部的文本显示在 ::在 css 之前
- on更改文本框的文本显示在另一个文本框上
- 在文本显示在Scroll上之前在页面上隐藏文本的问题
- 使用带文本显示的Jquery切换文本
- 如何使文本显示速度变慢
- 如何将图片添加到点击计数器文本显示<图像><点击量>
- 文本显示有延迟
- 根据在另一个文本框中输入的文本显示文本框中的文本
- 如何从点击文本显示文件浏览器,并在悬停文本时将鼠标光标更改为指针
- 使文本显示为几行可点击的线条
- 如何使文本显示