问问题
18668 次
5 回答
2
问题是,$(this)
in$(this).val(selected)
指的是已删除 <span>
的元素,而不是您的新元素。您需要将其替换为:
$('select').val(selected);
抓取之前插入的新元素。
此外,您的代码不必要地复杂,这做同样的事情,但更简单:
function ControlOn() {
$selectText = $('.select-type');
var selected = $selectText.text();
$selectText.replaceWith('<select><option>ABC</option><option>DEF</option></select>');
$('select').val(selected); // Use an id instead to match: #my-select-id
}
确保给元素一个 ID,否则一旦你在页面的其他地方<select>
引入一个新元素,它就会搞砸。<select>
于 2012-10-04T12:48:10.730 回答
1
设置选项值将解决您的问题。jsfiddle
<select><option value='ABC'>ABC</option><option value="DEF">DEF</option></select>
于 2012-10-04T12:44:53.707 回答
1
function ControlOn() {
$('.select-type').each(function () {
var selected = $(this).text();
$(this).replaceWith($('<select><option>ABC</option><option>DEF</option></select>').val(selected));
});
}
像上面那样重写你的代码,它会工作!
引用的元素this
不会更改为您刚刚创建的选择元素,它将始终是span
该函数范围内的元素。因此,您应该将值设置为新创建select
的而不是不变量$(this)
!
于 2012-10-04T12:55:09.760 回答
1
问题是ControlOn
你有一个each
循环遍历.select-type
元素span
的元素,这些元素不能使用以下val
方法设置:
您可以通过将方法更改为此来解决此问题:
function ControlOn() {
$('.select-type').each(function () {
var selected = $(this).text();
var $select = $('<select><option>ABC</option><option>DEF</option></select>');
$(this).replaceWith($select)
$select.val(selected);
});
}
现场示例:http: //jsfiddle.net/qSYYc/4/
于 2012-10-04T12:41:28.293 回答
-1
我建议您使用“禁用”属性来打开和关闭选择,它不会弄乱 .val() 功能
function ControlOff() {
$("select").attr("disabled", "disabled");
}
function ControlOn() {
$("select").removeAttr("disabled");
}
于 2012-10-04T12:50:05.813 回答