Add product to cart using checkbox and AJAX
You are going down the right path with MultiAdd.

I have an application that on a single product page, I am also selling additional products that are an add-on of the parent. They are separate products, but they exist together. As in, the parent product is the only place the additional products are sold. 

When the administrator is creating the parent product, I give them the option (mainly checkboxes) "Include option B". When checked, the additional product will show.

This is kind-of how it works...

&lt;form method="post" action="" accept-charset="utf-8"&gt;
    &lt;input type="hidden" name="action" value="multiAdd/multiAdd"&gt;
    &lt;input type="hidden" name="redirect" value="shop/cart"&gt;
    {{ getCsrfInput() }}


...

{# This is the primary/parent product. #}
&lt;select id="myVariant" name="items[1][purchasableId]" class="form-control required" required&gt;
    &lt;option value=""&gt;Select Option&lt;/option&gt;
   {% for purchasable in product.variants %}
       &lt;option {% if purchasable.stock &lt;= 0 and purchasable.unlimitedStock == false %}disabled {% endif %}
           value="{{ purchasable.purchasableId }}"
           data-position="{{ purchasable.myVariant }}"
           data-price="{% if purchasable.price == 0 %}Free{% else %}
          {{ purchasable.price|currency(cart.currency) }}{% endif %}"&gt;
              {{ purchasable.myVariant.label }} &amp;ndash; {% if purchasable.price == 0 %}Free{% else %}{{ purchasable.price|currency(cart.currency) }}{% endif %}                                                                       
        &lt;/option&gt;
    {% endfor %}                                                                
&lt;/select&gt;
&lt;input type="hidden" name="items[1][qty]" value="1"&gt;

...

{# This is the additional product. #}
{% if product.myOption|length %}
&lt;fieldset&gt;
    {% set options = product.myFirstOption %}
    {% if options|length %}
        &lt;legend&gt;Some Optional Thing&lt;/legend&gt;
        &lt;div class="form-group form-group--select"&gt;
            &lt;label for="option" class="select-label"&gt;Option&lt;/label&gt;
            &lt;select id="option" name="items[2][purchasableId]" class="form-control required"&gt;
                &lt;option value=""&gt;Select Option&lt;/option&gt;
                    {% for option in options %}
                        &lt;option value="{{ option.defaultVariant.purchasableId }}" data-price="{{ option.defaultVariant.price|currency(cart.currency) }}"&gt;
                            {{ option.title }} &amp;ndash; {% if option.defaultVariant.price == 0 %} Included with registration {% else %} {{ option.defaultVariant.price|currency(cart.currency) }}{% endif %}
                        &lt;/option&gt;
                   {% endfor %}
            &lt;/select&gt;
            &lt;input type="hidden" id="optionQty" name="items[2][qty]" value="0"&gt;
        &lt;/div&gt;
    {% endif %}
&lt;/fieldset&gt;
{% endif %}


What is important to note is this:

&lt;input type="hidden" name="items[1][qty]" value="1"&gt;
...
&lt;input type="hidden" name="items[2][qty]" value="0"&gt;


That's how MultiAdd knows what to add to the cart.

Once I choose my options and click "buy" any option(s) are added to my cart until I go into my cart and remove them.

There is an example for ajax in on the MultiAdd page. Instead of a traditional post, you are sending the same information to a url via ajax.

Hope this helps!