Триггерное событие изменения выпадающих

Неопределенное поведение позволяет компиляторам генерировать более быстрый код в некоторых случаях. Рассмотрим две разные архитектуры процессоров, которые ADD по-разному: процессор A по сути отбрасывает бит переноса при переполнении, в то время как процессор B генерирует ошибку. (Разумеется, процессор C по своей сути генерирует Nasal Demons - это самый простой способ разрядить этот дополнительный бит энергии в наноблоте с сопливым питанием ...)

Если стандарту требовалось создать ошибку, то весь код, скомпилированный для процессора A, в основном будет вынужден включать дополнительные инструкции, чтобы выполнить некоторую проверку для переполнения, и если это так, создайте ошибку. Это приведет к более медленному коду, даже если разработчик знает, что они только собираются в конечном итоге добавить небольшие числа.

Неопределенное поведение приносит в жертву переносимость скорости. Предоставляя «что-либо», компилятор может избежать написания проверок безопасности для ситуаций, которые никогда не произойдут. (Или, вы знаете ... они могут это сделать.)

Кроме того, когда программист точно знает, что неопределенное поведение действительно вызовет в их заданной среде, они могут использовать эти знания для получения дополнительной производительности.

Если вы хотите, чтобы ваш код вел себя точно так же на всех платформах, вам нужно убедиться, что «неопределенное поведение» никогда не происходит, однако это может быть не ваша цель.

Изменить: (В ответ на редактирование OP) Реализация Определенное поведение потребует последовательной генерации носовых демонов. Неопределенное поведение позволяет спорадической генерации носовых демонов.

Именно здесь появляется преимущество, которое имеет неопределенное поведение по сравнению с конкретным поведением. Учтите, что для предотвращения непоследовательного поведения в конкретной системе может потребоваться дополнительный код. В этих случаях неопределенное поведение позволяет увеличить скорость.

81
задан Boris Callens 15 June 2009 в 09:08
поделиться

3 ответа

Я не знаю столько JQuery, но слышал, что он позволяет запускать собственные события с этим синтаксисом.

$(document).ready(function(){

    $('#countrylist').change(function(e){
       // Your event handler
    });

    // And now fire change event when the DOM is ready
    $('#countrylist').trigger('change');
});

Вы должны объявить обработчик события изменения перед вызовом trigger () или изменить () иначе он не будет запущен. Спасибо за упоминание @LenielMacaferi.

Дополнительная информация здесь .

174
ответ дан 24 November 2019 в 09:32
поделиться

По некоторым причинам другой jQuery решения, предоставленные здесь, работали при выполнении сценария от консоли, однако, это не работало на меня при инициировании от Chrome Bookmarklets.

К счастью, это Ванильное решение JS (эти triggerChangeEvent функция) действительно работало:

/**
  * Trigger a `change` event on given drop down option element.
  * WARNING: only works if not already selected.
  * @see https://stackoverflow.com/questions/902212/trigger-change-event-of-dropdown/58579258#58579258
  */
function triggerChangeEvent(option) {
  // set selected property
  option.selected = true;
  
  // raise event on parent <select> element
  if ("createEvent" in document) {
    var evt = document.createEvent("HTMLEvents");
    evt.initEvent("change", false, true);
    option.parentNode.dispatchEvent(evt);
  }
  else {
    option.parentNode.fireEvent("onchange");
  }
}

// ################################################
// Setup our test case
// ################################################

(function setup() {
  const sel = document.querySelector('#fruit');
  sel.onchange = () => {
    document.querySelector('#result').textContent = sel.value;
  };
})();

function runTest() {
  const sel = document.querySelector('#selector').value;
  const optionEl = document.querySelector(sel);
  triggerChangeEvent(optionEl);
}
<select id="fruit">
  <option value="">(select a fruit)</option>
  <option value="apple">Apple</option>
  <option value="banana">Banana</option>
  <option value="pineapple">Pineapple</option>
</select>

<p>
  You have selected: <b id="result"></b>
</p>
<p>
  <input id="selector" placeholder="selector" value="option[value='banana']">
  <button onclick="runTest()">Trigger select!</button>
</p>
0
ответ дан 24 November 2019 в 09:32
поделиться

Если вы пытаетесь связать раскрывающиеся списки, лучший способ сделать это - иметь сценарий, который возвращает предварительно созданное поле выбора и вызов AJAX, который его запрашивает.

Здесь - это документация для метода Ajax в jQuery, если он вам нужен.

$(document).ready(function(){

    $('#countrylist').change(function(e){
        $this = $(e.target);
        $.ajax({
            type: "POST",
            url: "scriptname.asp", // Don't know asp/asp.net at all so you will have to do this bit
            data: { country: $this.val() },
            success:function(data){
                $('#stateBoxHook').html(data);
            }
        });
    });

});

Затем выделите диапазон вокруг поля выбора состояния с идентификатором "stateBoxHook"

2
ответ дан 24 November 2019 в 09:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: