我有问题。我已经创建了一些代码,逻辑上它应该可以正常工作,但是每次我启动它都没有做它应该做的事情。我将在下面发布代码和jsFiddle,但主要问题是当div的值设置为Gold时禁用第二个选择框
jquery的:
$('select[name="Package Options"]').change(function() {
$('#result').html($(this).find(":selected").val());
var result = $('#result').val();
if(result == 'Gold') {
$('select[name="Bolt On Options"]').attr('disabled', 'disabled');
}
});
jsFiddle - http://jsfiddle.net/andyjh07/xHrHA/
谢谢你们
答案 0 :(得分:1)
您应该使用html()
方法检索元素#result
的内容。 val()
主要用于检索表单元素的值。
$('select[name="Package Options"]').change(function() {
$('#result').html($(this).find(":selected").val());
var result = $('#result').html(); //Notice .html() instead of val()
if(result == 'Gold') {
$('select[name="Bolt On Options"]').attr('disabled', 'disabled');
}
});
工作示例:http://jsfiddle.net/xHrHA/2/
正如评论中所指出的,这可以简化为:
$('select[name="Package Options"]').change(function() {
$('#result').html($(this).find(":selected").val());
if($(this).val() == 'Gold') {
$('select[name="Bolt On Options"]').attr('disabled', 'disabled');
}
});
答案 1 :(得分:1)
您的代码太复杂了 - 不需要.find
:selected
值 - 它已在事件处理程序中以this.value
形式提供。
您还需要能够在选择其他值时重新启用控件,因此:
$('select[name="Package Options"]').change(function () {
var result = this.value;
$('#result').html(result);
$('select[name="Bolt On Options"]').prop('disabled', result === 'Gold');
});
注意:您应该使用.prop
来更改现有控件的属性,而不是.attr
。后者只应该反映HTML源代码中存在的属性,尽管jQuery确实存在disabled
属性的hack以确保它在这些情况下工作。另一个优点(如此处所示)是提供的值是布尔值,进一步简化了代码。
我还建议用简单的ID替换你的select[name="..."]
选择器(当然必须在元素上也存在)。这将使您的代码更具可读性,提供如下所示的最终解决方案,这不仅比原始代码短得多,而且效率更高和处理“重置”回到“启用“选择其他选项时:
$('#package').change(function () {
var result = this.value;
$('#result').html(result);
$('#bolton').prop('disabled', result === 'Gold');
});
答案 2 :(得分:0)
试试这个
JS CODE
$('select[name="Package Options"]').change(function() {
$('#result').html($(this).find(":selected").val());
var result = $('#result').text();//use `text()` or `html()` instead of val()
if(result == 'Gold') {
$('select[name="Bolt On Options"]').attr('disabled', 'disabled');
}
});
的 LIVE DEMO 强> 的
答案 3 :(得分:0)
div没有value属性,因此无法使用val()。您将需要使用.text()或.html()代替。
答案 4 :(得分:-2)
尝试使用
var result = $ .trim('#result')。val();