【问题标题】:Issue with multiple elements in a change function更改功能中的多个元素问题
【发布时间】:2017-08-06 12:31:18
【问题描述】:

我有两个部分将显示在我的小提琴中。您选择产品的第一部分(A 或 B)。然后,每当您选择一个选项时,都会显示一个下一步按钮。当您单击下一步时,它会将您带到显示产品选择的第二部分。

我相信我的问题存在于我的更改函数或其中的 if 语句中。基本上,我不确定我对以此开头的代码做错了什么:

  $('#package1, #package2').on('change', function () {
        if ($('#package1' && '#package2').prop("checked")) {

我想根据选择对第二部分(选择产品后)进行不同的格式化。我正在努力做的是,如果同时选择产品 A 和 B 以仅在第二部分中显示产品 A 部分 #pg-review-section 并隐藏产品 B 部分 #tp-selection

基本上,如果同时选择了 A 和 B,我不确定如何修改代码,但我希望它在选择随时更改的情况下运行更改函数。

Here is a fiddle for demonstration.

下面的代码是我正在努力的。

$('#package1', '#package2').on('change', function () {
    if ($('#package1' && '#package2').prop("checked")) {
        $('#pg-review-section').show();
        $('#tp-review-section').show();
        $('#tp-selection').hide();
        $('#tp-selection').fadeBoolToggle($('#calendar-preview-select option:selected'));
    }
});
$('#package1').on('change', function () {
    if ($('#package1').prop("checked")) {
        $('#pg-selection').show();
        $('#pg-review-section').show();
        $('#tp-review-section').hide();
    } else {
        $('#pg-selection').hide();
    }
});
$('#package2').on('change', function () {
    if ($('#package2').prop("checked")) {
        $('#tp-selection').show();
        $('#tpreview-section').show();
        $('#pg-review-section').hide();
    } else {
        $('#tp-selection').hide();
    }
});

更新:

$('#package1, #package2').on('change', function () {
     if ($('#package1').prop('checked') && $('#package2').prop('checked').length === 2) {
        $('#pg-review-section').show();
        $('#tp-review-section').show();
        $('#tp-selection').hide();
        $('#tp-selection').fadeBoolToggle($('#calendar-preview-select option:selected'));
    }
     else if ($('#package1').prop("checked") && !$('#package2').prop('checked')) {
        $('#pg-selection').show();
        $('#pg-review-section').show();
        $('#tp-review-section').hide();
    }
     else if ($('#package2').prop("checked") && !$('#package1').prop('checked')) {
        $('#tp-selection').show();
        $('#tp-review-section').show();
        $('#pg-review-section').hide();
    }
});

【问题讨论】:

  • 我认为 $('#package1', '#package2') 应该是 $('#package1, #package2') - 注意引号。另外,需要单独发现checked状态,即if ($('#package1').prop('checked') && $(''#package2').prop('checked'))
  • @RoryMcCrossan 谢谢,但我不确定我做错了什么,因为更改为您的解决方案仍然显示产品 B。
  • @RoryMcCrossan 在我的问题中,我添加了我现在正在尝试的更新代码。这不起作用。我改变了一些结构。
  • 我不知道我做错了什么。基本上,如果您单击产品 A 和 B(img 所在的图标)。然后继续。我只想显示 A 的内容(现在 B 也在显示)。然后,当您选择 A 的选项之一(1、2 或 3)时,它将显示 B。我扩展了我的小提琴。 jsfiddle.net/qshmxnuw/1

标签: javascript jquery function checkbox onchange


【解决方案1】:

使用 jquery 选择器:checked 并测试长度:

if ($('#package1:checked, #package2:checked').length === 2)

https://api.jquery.com/checked-selector/

【讨论】:

  • 不确定我做错了什么,但这似乎没有帮助。它仍然显示产品 B。
  • 在我的问题中,我添加了我现在正在尝试的更新代码。这不起作用。我改变了一些结构。
  • 我不知道我做错了什么。基本上,如果您单击产品 A 和 B(img 所在的图标)。然后继续。我只想显示 A 的内容(现在 B 也在显示)。然后,当您选择 A 的选项之一(1、2 或 3)时,它将显示 B。我扩展了我的小提琴。 jsfiddle.net/qshmxnuw/1
【解决方案2】:

在您的更新版本中,您在第一个 if 语句中的 package1 上缺少“.length”。

如果你想要的逻辑是:

选中 => 转到某个部分

b 检查 => 转到 b 部分

都选中 => 转到一个部分

为什么不直接创建一个通用函数来添加到您的更改事件中呢?类似的东西?

$('#package1').on('change', function () {
    myChangeFunction();
});
$('#package2').on('change', function () {
    myChangeFunction();
});
function myChangeFunction(){
   if ($('#package2').prop("checked") && $('#package1').prop("checked")){
      // show a and hide b
   }
   else if($('#package1').prop("checked")){
      // show a and hide b
   }
   else if($('#package2').prop("checked")){
      //  show b and hide a
   }
   else{
      //hide both
   }
}

【讨论】:

  • 我不知道我做错了什么。基本上,如果您单击产品 A 和 B(img 所在的图标)。然后继续。我只想显示 A 的内容(现在 B 也在显示)。然后,当您选择 A 的选项之一(1、2 或 3)时,它将显示 B。我扩展了我的小提琴。 jsfiddle.net/qshmxnuw/1
  • 只是为了澄清当您在第一个屏幕上选择 A 时,您希望显示 A 选项(1、2、3)。那么,如果选择了任何选项,则显示 B?那么第一页的选项 B 呢?
  • 是的,我希望产品 B 仅在产品 A 和 B 都从第一部分中选择时显示是否选择了(1、2 或 3)。
  • 您的小提琴中缺少一些结束 div 标记,我认为您的代码并非如此。要获得您想要的功能,请将 fadeBoolToggle 更改为 hide()。这将在您打开 A 时隐藏 B。然后挂钩选项 1、2、3 复选框的更改事件,然后将显示选项 B。如果这没有意义,请告诉我,我将在上面更新我的答案。
猜你喜欢
  • 2012-07-24
  • 1970-01-01
  • 2015-03-26
  • 1970-01-01
  • 1970-01-01
  • 2017-01-27
  • 2015-03-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多