#javascript #jquery
#javascript #jquery
Вопрос:
Как мне преобразовать версию этого кода на jQuery в версию, отличную от jQuery?
jQuery
jQuery(function($){
//change event handler for the checkbox
$('#isTracefile').change(function(){
//if it is checked set the select element's container to display else hide
$('#cttracefile').toggle(this.checked);
//if it is unchecked set the input element's container to display else hide
$('#custom').toggle(!this.checked);
}).change()
})
<div id="cttracefile">
Sample Tracefiles to use:
<select name="tracefile">
<option value="capacity.13Mbps_200RTT_PER_0.000001.txt">capacity.13Mbps_200RTT_PER_0.000001</option>
</select>
</div>
<div id="custom">
<label>Forward Delay: </label><input id="fd" type="number" min="0" max="1000" step="1" value ="100"/> ms
<br/>
<label>Reverse Delay: </label><input id="rd" type="number" min="0" max="1000" step="1" value ="100"/> ms
<br/>
<label>Download Capacity: </label><input id="down" type="number" min="1" max="30" step="1" value ="1"/> MBps
<br/>
<label>Upload Capacity: </label><input id="up" type="number" min="1" max="30" step="1" value ="1"/> MBps
<br/>
<label>Packet Error Rate (PER): </label><input id="per" type="number" min="0.00001" max="1" step="0.00001" value ="0.00001"/>
</div>
Какие существуют версии .change()
and, отличные от jQuery .toggle()
?
Комментарии:
1. вы говорите об использовании html
<script>
-тега внутри файла? это сохранит «все в одном файле» — jquery настолько «обычный», насколько вы можете получить с помощью javascript2. на вашей скрипке — вы бы просто взяли jquery и скопировали, вставили его в index.html например….
<script>*jquery stuff*</script>
3. да, я могу сделать так; но я предполагаю, что jQuery — это большой файл для копирования в мой html-файл. Однако if-else не должен иметь большого значения для использования только jQuery! Мне нужно сделать это как несколько самописных функций.
4. что вы имеете в виду …»jquery — это большой файл для копирования»?
5. Часть JS находится на скрипке. Я также отредактирую вопрос здесь. Что мне тогда делать ?! У меня есть собственный сервер, отправляющий файлы, и мне нужно отлаживать и прочее. Я хочу сделать index.html как можно меньше.
Ответ №1:
Это может быть использовано в качестве вашего решения, отличного от jquery. Вам просто нужно будет установить начальные значения
var isTrace = document.getElementById('isTracefile');
var ctTrace = document.getElementById('cttracefile');
var custom = document.getElementById('custom');
isTrace.onchange = function(){
if (isTrace.checked) {
ctTrace.style.display = "none";
custom.style.display = "block";
} else {
custom.style.display = "none";
ctTrace.style.display = "block";
}
};
Демонстрационная скрипка: http://jsfiddle.net/adjit/3at2c/4 /
Комментарии:
1. Достаточно справедливо! Спасибо. На самом деле флажок должен быть наоборот, но это был всего лишь вопрос добавления «!» 😉 спасибо.
2. Если вы не ждете загрузки страницы
TypeError: Cannot read property 'onchange' of null
, вы также не запустили ее с первого раза (хотя это довольно простое дополнение к тому, как вы ее написали)3. @Adjit Интересно, почему это не работает в моем браузере, Opera, IE. Это не должно быть чем-то особенным…
4. @TinaJasmin, скорее всего, имеет какое-то отношение к комментарию Пола С. выше. Перед запуском скрипта убедитесь, что страница загружена, иначе при извлечении элементов может вернуться значение null, если этот элемент еще не был загружен
5. @Adjit Я изменил некоторые части и применил
document.onload
, но никаких изменений. Знаете ли вы какие-либо способы это исправить?
Ответ №2:
$(fn)
становитсяwindow.addEventListener('load', fn)
$('#id')
становитсяdocument.getElementById('id')
$jqo.change(fn)
становитсяelement.addEventListener('change', fn)
- изменение видимости на основе bool
element.style.display = bool ? '' : 'none'
Наконец, вы запускаете change
событие на своем узле, это немного сложнее сделать в ванили в зависимости от браузеров, которые вы хотите поддерживать, но вы можете использовать element.dispatchEvent
с. new Event(type)
Итак, все вместе,
window.addEventListener('load', function () {
document.getElementById('isTracefile')
.addEventListener('change', function () {
document.getElementById('cttracefile')
.style.display = this.checked ? '' : 'none';
document.getElementById('custom')
.style.display = !this.checked ? '' : 'none';
});
document.getElementById('isTracefile').dispatchEvent(new Event('change'));
});