1

我有个问题。我已经创建了一些代码,从逻辑上讲它应该可以工作,但是每次我触发它时,它都没有做它应该做的事情。我将在下面发布代码和 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/

多谢你们

4

5 回答 5

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');
  }
});

工作示例:http: //jsfiddle.net/xHrHA/3/

于 2013-02-14T10:43:31.087 回答
1

你的代码太复杂了——不需要.find:selected——它已经this.value在事件处理程序中可用。

You also need to be able to re-enable the control when another value is picked, so:

$('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属性进行了修改以确保它在这些情况下工作。另一个优点(如此处所示)是提供的值是布尔值,进一步简化了代码。

我还建议用select[name="..."]简单的 ID 替换您的选择器(当然,这些 ID 也必须出现在元素上)。它将使您的代码更具可读性,给出如下所示的最终解决方案,它不仅比您的原始代码短得多,而且效率更高,并且在选择另一个选项时将“重置”处理回“启用” :

$('#package').change(function () {
    var result = this.value;
    $('#result').html(result);
    $('#bolton').prop('disabled', result === 'Gold');
});

http://jsfiddle.net/alnitak/gBMQ9/

于 2013-02-14T10:46:36.917 回答
0

尝试这个

JS代码

$('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');
  }
});

现场演示

于 2013-02-14T10:44:33.583 回答
0

div 没有 value 属性,因此 val() 不能使用。您将需要使用 .text() 或 .html() 代替。

于 2013-02-14T10:44:46.383 回答
-2

尝试使用

var 结果 = $.trim('#result').val();

于 2013-02-14T10:44:56.223 回答