#jquery #asp.net #buttongroup
Вопрос:
У меня обычное поведение групповой кнопки с меткой и переключателями:
<div class="btn-group" data-toggle="buttons">
<label class="btn" id="lblAct1">
<input type="radio" value="Val1">
Act1
</label>
<label class="btn" id="lblAct2">
<input type="radio" value="Val2">
Act2
</label>
<label class="btn" id="lblAct3">
<input type="radio" value="Val3">
Act3
</label>
</div>
Когда я меняю заголовок метки с $("#lblAct1").html(getTranslation("ACT1"))
элементами группы кнопок, поведение останавливается по мере необходимости(нажатый элемент стал активным, другие неактивны)
Пожалуйста, помогите.
Ответ №1:
Проблема в том, что html()
перезаписывается все содержимое в целевом элементе, а не только текстовые узлы. Кроме того, поскольку вы имеете дело с текстовым контентом, а не с HTML, вы можете использовать этот text()
метод для предотвращения атак XSS.
Также обратите внимание, что, если предположить, что эти радиовходы связаны, они должны иметь один и тот же name
атрибут, чтобы их можно было правильно сгруппировать.
Простое решение для вашей ситуации состоит в том, чтобы поместить текстовый узел в другой элемент , например a span
, а затем установить text()
вместо него значение этого элемента:
let getTranslation = input => input ' translation here...';
$("#lblAct1 span").text(getTranslation("ACT1"))
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="btn-group" data-toggle="buttons">
<label class="btn" id="lblAct1">
<input type="radio" value="Val1" name="foo" />
<span>Act1</span>
</label>
<label class="btn" id="lblAct2">
<input type="radio" value="Val2" name="foo" />
<span>Act2</span>
</label>
<label class="btn" id="lblAct3">
<input type="radio" value="Val3" name="foo" />
<span>Act3</span>
</label>
</div>
Также обратите внимание, что вы можете сделать свой код перевода полностью динамичным, предоставив текст элемента getTranslation()
функции прямо из DOM, вместо его жесткого кодирования и прикрепив N вызовов методов:
let getTranslation = input => input ' translation here...';
$(".translatable span").text((i, t) => getTranslation(t))
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="btn-group" data-toggle="buttons">
<label class="btn translatable">
<input type="radio" value="Val1" name="foo" />
<span>Act1</span>
</label>
<label class="btn translatable">
<input type="radio" value="Val2" name="foo" />
<span>Act2</span>
</label>
<label class="btn translatable">
<input type="radio" value="Val3" name="foo" />
<span>Act3</span>
</label>
</div>