【问题标题】:Show hide fields based on multiple select option by jquery通过jquery显示基于多选选项的隐藏字段
【发布时间】:2016-11-28 17:42:52
【问题描述】:

我下面有这三个选择框,我想当第一个选择框为空时,隐藏第二个和第三个选择框,当第一个选择框包含custom-category时显示第二个选择框,当第一个选择框包含custom-tag时显示第三个选择框box,当第一个选择框同时包含custom-categorycustom-tag时显示第二个和第三个选择框

我尝试使用此 jquery 代码,但不适用于上述所有情况

$('.field-content-multiple select').change(function() {
$(this).find('option:selected').each(function() {
    if($(this).attr('value') == 'custom-category') {
        $('p.field-custom-category').show();
        $('p.field-custom-tag').hide();
    } else if($(this).attr('value') == 'custom-tag') {
        $('p.field-custom-tag').show();
        $('p.field-custom-category').hide();
    } else {
        $('p.field-custom-category').hide();
        $('p.field-custom-tag').hide();
    }
});
}).change();

这是三个选择框

<p class="field-content-multiple description description-wide">
<select name="menu-item-content-multiple[<?php echo $item_id; ?>][]" id="edit-menu-item-content-multiple-<?php echo $item_id; ?>" class="widefat code edit-menu-item-content-multiple bsnselect" multiple>
        <?php foreach (self::$YPE_multiple as $key => $value): ?>
            <option value="<?php echo $key; ?>"  <?php echo  selected(in_array($key, $item->content_multiple)); ?>><?php echo $value;?>  </option>
        <?php endforeach ?>
</select>
</p>

<p class="field-custom-category description description-wide">
<label for="edit-menu-item-custom-category-<?php echo $item_id; ?>">
    <?php _e( 'Select specific categories' ); ?><br />
    <select name="menu-item-custom-category[<?php echo $item_id; ?>][]" id="edit-menu-item-custom-category-<?php echo $item_id; ?>" class="widefat code edit-menu-item-custom-category bsnselect" multiple>
        <?php
            $YPE_cats = get_categories();
            foreach ($YPE_cats as $YPE_cat) { ?>
                <option value="<?php echo $YPE_cat->slug; ?>"  <?php echo  selected(in_array($YPE_cat->slug, $item->custom_category)); ?>><?php echo  $YPE_cat->name;?></option><?php
            }
        ?>
    </select>
</label>
</p>

<p class="field-custom-tag description description-wide">
<label for="edit-menu-item-custom-tag-<?php echo $item_id; ?>">
    <?php _e( 'Select specific tags' ); ?><br />
    <select name="menu-item-custom-tag[<?php echo $item_id; ?>][]" id="edit- menu-item-custom-tag-<?php echo $item_id; ?>" class="widefat code edit-menu- item-custom-tag bsnselect" multiple>
        <?php
            $YPE_tags = get_tags();
            foreach ($YPE_tags as $YPE_tag) { ?>
                <option value="<?php echo $YPE_tag->slug; ?>" <?php echo  selected(in_array($YPE_tag->slug, $item->custom_tag)); ?>><?php echo $YPE_tag->name;?></option><?php
            }
        ?>
    </select>
</label>
</p>

【问题讨论】:

标签: jquery-select2 jquery-select2-4


【解决方案1】:

我在第一条评论中误解了您的代码,问题是当您阅读“标签”时,您将隐藏“类别”,反之亦然,这可能不是解决问题的最佳方法,但可能帮助您了解那里的问题!

var categoryFlag = false;
var tagFlag = false;

$(this).find('option:selected').each(function() {
    if($(this).attr('value') == 'custom-category') {
       categoryFlag = true;
    } else if($(this).attr('value') == 'custom-tag') {
       tagFlag = true;
    }
});

if(categoryFlag && tagFlag) {
    $('p.field-custom-category').show();
    $('p.field-custom-tag').show();   
    categoryFlag = false;
    tagFlag = false;
} else if(categoryFlag && !tagFlag) {
    $('p.field-custom-category').show();
    $('p.field-custom-tag').hide();
    categoryFlag = false;
    tagFlag = false;
} else if(!categoryFlag && tagFlag) {
    $('p.field-custom-category').hide();
    $('p.field-custom-tag').show();
    categoryFlag = false;
    tagFlag = false;
} else {
    $('p.field-custom-category').hide();
    $('p.field-custom-tag').hide();
    categoryFlag = false;
    tagFlag = false;
}

【讨论】:

  • 我使用Select2 jquery 插件作为选择框,例如,当我只选择custom-category 然后显示第二个选择框但当我取消选择custom-category 时不隐藏第二个选择框
  • 哦,你是对的,我没有重置 categoryFlag 和 tagFlag 上的值,请在 if eles 重置值的最后一部分尝试,我会更新 anwser。
  • 非常感谢您的代码完美运行。但我想在应用 jquery change() 函数之前不要显示第二个和第三个选择框。但是在您的代码中应用change() 函数之前显示第二个和第三个选择框
  • 很抱歉刚刚看到您说了些什么,您可以先将它们隐藏在代码的开头,这样就可以解决问题。就像只是调用 $('p.field-custom-category').hide(); $('p.field-custom-tag').hide();
  • 是的,我能做到。我在应用更改功能之前隐藏了第二个和第三个选择框,直到现在还没有问题。例如,当我选择custom-tag 时直接显示第三个选择框,但是当我保存页面然后刷新时它不会出现第三个选择框?表示仅在应用更改时出现 我想要何时应用更改并选择 custom-tag 保存并刷新页面后从不隐藏第三个选择框
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-13
  • 2011-12-03
  • 1970-01-01
  • 2013-09-16
相关资源
最近更新 更多