JQuery - 从下拉列表中选择的选项中删除复选框

发布于 2024-12-18 12:16:48 字数 966 浏览 2 评论 0原文

我知道这个标题有点过分。

我想要的是我有一个下拉菜单,里面有一些选项,其中两个选项是“特殊的”。当你选择这两个之一时,3个复选框应该被灰色/删除/等..

这里是一些代码:

HTML:

//THE DROPDOWN
<select id="pow-abo" style="float:left;">
<option id="data6" value="149">XXXX</option>
<option id="data11" value="199">XXXX</option>
</select>

//THE CHECKBOXES
<div id="pakkerPow">
<input id="surfstart" type="checkbox" value="29" />XXXX<br/>
<input id="surfmini" type="checkbox" value="49" />XXXX<br/>
<input id="surfmaxi" type="checkbox" value="99" />XXXX<br/>
</div>

Jquery:

// THE JQUERY DROPDOWN
$('#pow-abo').change(function (){
    powAbo = parseFloat($('#pow-abo').val());
    if($('#pow-abo').id() == 'data6' || $('#pow-abo').id() == 'data11')
    {
        $('#surfstart').hide();
        $('#surfmini').hide();
        $('#surfmaxi').hide();
    }
    visResultat2();
});

i know the title is a bit wired.

what i want is that i have a dropdown, theres some options in there, two of those options are "special". When you choose one of those two, 3 checkboxes should be gryed out/removed/ect..

heres some code:

HTML:

//THE DROPDOWN
<select id="pow-abo" style="float:left;">
<option id="data6" value="149">XXXX</option>
<option id="data11" value="199">XXXX</option>
</select>

//THE CHECKBOXES
<div id="pakkerPow">
<input id="surfstart" type="checkbox" value="29" />XXXX<br/>
<input id="surfmini" type="checkbox" value="49" />XXXX<br/>
<input id="surfmaxi" type="checkbox" value="99" />XXXX<br/>
</div>

Jquery:

// THE JQUERY DROPDOWN
$('#pow-abo').change(function (){
    powAbo = parseFloat($('#pow-abo').val());
    if($('#pow-abo').id() == 'data6' || $('#pow-abo').id() == 'data11')
    {
        $('#surfstart').hide();
        $('#surfmini').hide();
        $('#surfmaxi').hide();
    }
    visResultat2();
});

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

七堇年 2024-12-25 12:16:48

您的代码存在一些问题。它们以您的 if 语句为中心。看下面的代码片段:

$('#pow-abo').id()

第一个问题是 id 不是 jQuery 对象的方法。第二个问题是 #pow-aboselect 元素,而不是选定的选项。您似乎正在尝试获取所选选项的id

要获取选定的选项,作为 DOM 元素(而不是 jQuery 对象),您可以执行以下操作:

var selected = $(this).find(":selected")[0];

然后您可以使用 selected.id 来获取 id 所选选项:

$('#pow-abo').change(function () {
    var selected = $(this).find(":selected")[0],
        powAbo = parseFloat($('#pow-abo').val());
    if(selected.id == 'data6' || selected.id == 'data11') {
        $('#surfstart').hide();
        $('#surfmini').hide();
        $('#surfmaxi').hide();
    }
});

请注意,您还可以将 hide 调用缩短为一个:

$("#surfstart, #surfmini, #surfmaxi").hide();

或者,隐藏 #pakkerPow 内的所有复选框:

$("#pakkerPow :checkbox").hide();

There are a couple of problems with your code. They centre around your if statement. Look at the following snippet:

$('#pow-abo').id()

The first problem is that id is not a method of a jQuery object. The second problem is that #pow-abo is the select element, not the selected option. It looks like you are trying to get the id of the selected option.

To get the selected option, as a DOM element (not a jQuery object) you could do something like this:

var selected = $(this).find(":selected")[0];

You would then be able to use selected.id to get the id of the selected option:

$('#pow-abo').change(function () {
    var selected = $(this).find(":selected")[0],
        powAbo = parseFloat($('#pow-abo').val());
    if(selected.id == 'data6' || selected.id == 'data11') {
        $('#surfstart').hide();
        $('#surfmini').hide();
        $('#surfmaxi').hide();
    }
});

Note that you could also shorten the hide calls into one:

$("#surfstart, #surfmini, #surfmaxi").hide();

Or, to hide all the checkboxes inside #pakkerPow:

$("#pakkerPow :checkbox").hide();
奢欲 2024-12-25 12:16:48

我会这样做: http://jsfiddle.net/pZcAF/6/

简而言之:

  • 你的 jQuery 中有几个错误
  • 隐藏()复选框而不是禁用它们
  • 你永远不会重新启用(或show())它们

中的附加功能示例(作为奖励,如果您发现它有用):

  • 检查“特殊”选项上给定的类(允许您动态创建特殊选项列表)

I would do it this way: http://jsfiddle.net/pZcAF/6/

In short:

  • you have a couple of errors in your jQuery
  • you hide() the checkboxes instead of disabling them
  • you never re-enable (or show()) them back

Additional feature in the example (as a bonus, in case you find it useful):

  • checks for a given class on the "special" options (allows you to have a dynamically created list of special options)
感情旳空白 2024-12-25 12:16:48

为了“变灰”或禁用表单元素,您必须向该元素添加禁用属性。

而不是

$('#surfstart').hide();

执行此操作

$('#surfstart').attr('disabled','disabled');

启用禁用的元素

$('#surfstart').removeAttr('disabled');

In order to 'grey out' or disable a form element, you have to add the disabled attribute to the element.

Instead of

$('#surfstart').hide();

Do this

$('#surfstart').attr('disabled','disabled');

To enable a disabled element

$('#surfstart').removeAttr('disabled');

天冷不及心凉 2024-12-25 12:16:48

如果你真的想使用显示和隐藏,请看一下这个演示:
http://jsfiddle.net/xAcz7/

我不是看 id,而是看值,这是隐藏选项 1 和 2,显示选项 3。
我没有隐藏 3 个复选框,而是隐藏了包含复选框的 div。节省您的代码行;)
希望这有帮助

if you really want to use show and hide take a look at this demo:
http://jsfiddle.net/xAcz7/

Instead of looking at the id im looking at the values, which is hide for options 1 and 2 and show for option 3.
And instead of hiding the 3 checkboxes im just hiding the div that contains the checkboxes. saves you lines of code ;)
Hope this helps

请别遗忘我 2024-12-25 12:16:48

您的测试应该针对选择值,而不是针对 ids:

 // THE JQUERY DROPDOWN
$('#pow-abo').change(function (){
  powAbo = parseFloat($(this).val());
  if(powAbo == '199' || powAbo == '149')
  {
    $("#pakkerPow input").attr("disabled", "disabled");
  }
  visResultat2();
});

Your test should be on the select value, not on ids:

 // THE JQUERY DROPDOWN
$('#pow-abo').change(function (){
  powAbo = parseFloat($(this).val());
  if(powAbo == '199' || powAbo == '149')
  {
    $("#pakkerPow input").attr("disabled", "disabled");
  }
  visResultat2();
});
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文