删除更改 jquery 函数的特定值
remove specific values on a change jquery function
背景
我有 3 个字段包含某些数据。他们都有共同的 class 马球篮名称 -- 标签。
<div class="row">
<div class="columns small-8">
<label for="basket__label">basket labels in the dog</label>
<select class="fancy-dropdown" name="selected_basket__labels" id="polo-basket--labels" multiple="true" data-placeholder="Choose..." style="width: 400px">
{{#each referencePanelbaskets}}
<option {{#ifArrayContains ../polosWithoutUncertainString this}}selected{{/ifArrayContains}} value="{{this}}">{{this}}</option>
{{/each}}
</select>
</div>
</div>
<div class="row">
<div class="columns small-6">
<label for="basket__labels_on_parent_a">Parent A/label>
<select class="fancy-dropdown polo-parent-basket--labels" name="basket__labels_on_parent_a[]" multiple="true" data-placeholder="Choose..." style="width: 400px">
{{#each referencePanelbaskets}}
<option {{#ifArrayContains ../parentAsWithInsteadOfUncertain this}}selected{{/ifArrayContains}} value="{{this}}">{{this}}</option>
{{/each}}
</select>
</div>
<div class="columns small-6">
<label for="basket__labels_on_parent_b">Parent B</label>
<select class="fancy-dropdown polo-parent-basket--labels" name="basket__labels_on_parent_b[]" multiple="true" data-placeholder="Choose..." style="width: 400px">
{{#each referencePanelbaskets}}
<option {{#ifArrayContains ../parentBsWithInsteadOfUncertain this}}selected{{/ifArrayContains}} value="{{this}}">{{this}}</option>
{{/each}}
</select>
</div>
每当我从第一个 div 中删除一个值时
class="fancy-dropdown"
它触发下面发布的 jquery 并核对字段 Parent A 和 Parent B 中的所有值。Parent 和 Parent B 是
class="fancy-dropdown polo-parent-basket--labels"
$('#polo-basket--labels').change(function () {
var options = _.map($(this).val(), function (basket__label) {
return {
id: basket__label,
text: basket__label
}
})
$('.polo-parent-basket--labels').val(null).select2('destroy').empty().select2({data: options})
})
问题
但是我想改变这种行为。所以任何时候我都会从
中删除值
class="fancy-dropdown"
我只想从 ParentA 和 ParentB 中删除该值 div 而不是删除所有内容。
我是 jquery 的新手,而且我从来没有使用过 .hbs,所以我希望有任何意见。
到目前为止我尝试了什么
我认为 Jquery 函数的最后一行
$('.polo-parent-basket--labels').val(null).select2('destroy').empty().select2({data:
options})
是导致所有值核对的那个,所以我想也许我可以在这里传递数据,但没有运气。
您想使用 DOM 遍历 在您的选择器中更加具体,像这样:
// go up to the nearest row element, then grab the next sibling row
let parentA = $(this).closest('tr').next('tr');
// ... and the one after that
let parentB = parentA.next('tr');
parentA.val(null).select2('destroy').empty().select2({data: options});
parentB.val(null).select2('destroy').empty().select2({data: options});
})
有很多方法可以减少代码重复,但这会让您知道从哪里开始。例如,您可以通过将三个相关行分组到一个容器中来显着简化事情。
当您处于 "change" 功能时,向元素添加一个 class。
$('#theElementYouWantToSelect).attr("class", "newClassName");
然后删除包含该元素的元素。
$('.newClassName').remove();
背景
我有 3 个字段包含某些数据。他们都有共同的 class 马球篮名称 -- 标签。
<div class="row">
<div class="columns small-8">
<label for="basket__label">basket labels in the dog</label>
<select class="fancy-dropdown" name="selected_basket__labels" id="polo-basket--labels" multiple="true" data-placeholder="Choose..." style="width: 400px">
{{#each referencePanelbaskets}}
<option {{#ifArrayContains ../polosWithoutUncertainString this}}selected{{/ifArrayContains}} value="{{this}}">{{this}}</option>
{{/each}}
</select>
</div>
</div>
<div class="row">
<div class="columns small-6">
<label for="basket__labels_on_parent_a">Parent A/label>
<select class="fancy-dropdown polo-parent-basket--labels" name="basket__labels_on_parent_a[]" multiple="true" data-placeholder="Choose..." style="width: 400px">
{{#each referencePanelbaskets}}
<option {{#ifArrayContains ../parentAsWithInsteadOfUncertain this}}selected{{/ifArrayContains}} value="{{this}}">{{this}}</option>
{{/each}}
</select>
</div>
<div class="columns small-6">
<label for="basket__labels_on_parent_b">Parent B</label>
<select class="fancy-dropdown polo-parent-basket--labels" name="basket__labels_on_parent_b[]" multiple="true" data-placeholder="Choose..." style="width: 400px">
{{#each referencePanelbaskets}}
<option {{#ifArrayContains ../parentBsWithInsteadOfUncertain this}}selected{{/ifArrayContains}} value="{{this}}">{{this}}</option>
{{/each}}
</select>
</div>
每当我从第一个 div 中删除一个值时
class="fancy-dropdown"
它触发下面发布的 jquery 并核对字段 Parent A 和 Parent B 中的所有值。Parent 和 Parent B 是
class="fancy-dropdown polo-parent-basket--labels"
$('#polo-basket--labels').change(function () {
var options = _.map($(this).val(), function (basket__label) {
return {
id: basket__label,
text: basket__label
}
})
$('.polo-parent-basket--labels').val(null).select2('destroy').empty().select2({data: options})
})
问题
但是我想改变这种行为。所以任何时候我都会从
中删除值class="fancy-dropdown"
我只想从 ParentA 和 ParentB 中删除该值 div 而不是删除所有内容。
我是 jquery 的新手,而且我从来没有使用过 .hbs,所以我希望有任何意见。
到目前为止我尝试了什么
我认为 Jquery 函数的最后一行
$('.polo-parent-basket--labels').val(null).select2('destroy').empty().select2({data: options})
是导致所有值核对的那个,所以我想也许我可以在这里传递数据,但没有运气。
您想使用 DOM 遍历 在您的选择器中更加具体,像这样:
// go up to the nearest row element, then grab the next sibling row
let parentA = $(this).closest('tr').next('tr');
// ... and the one after that
let parentB = parentA.next('tr');
parentA.val(null).select2('destroy').empty().select2({data: options});
parentB.val(null).select2('destroy').empty().select2({data: options});
})
有很多方法可以减少代码重复,但这会让您知道从哪里开始。例如,您可以通过将三个相关行分组到一个容器中来显着简化事情。
当您处于 "change" 功能时,向元素添加一个 class。
$('#theElementYouWantToSelect).attr("class", "newClassName");
然后删除包含该元素的元素。
$('.newClassName').remove();