2015-02-04 3 views
0

Я пытаюсь подключить обработчик событий для динамического элемента, но не удалось.Прикрепить обработчик события для динамического элемента

Вот некоторые из моих кодов. Я хочу, чтобы событие вызывалось динамическим элементом. Возможно, javascript предоставляет функцию поддержки события attach для динамического элемента автоматически, не связывая его снова, например, jQuery live или по методу. Я хочу добавить функциональность, чтобы загружать данные города, в то время как государство или провинция выбраны для Magento Sales> Order> Create New Order Page, не нужно искать правильный файл javascript и пытаться связать событие с ним снова.

 
window.addEventListener('load', function(){ 
    function getCity(){ 
     id= this.selectedIndex; 
     name= this.name; 
     getKota(id, name); 
    } 

    billing_address_region_id= document.getElementsByName('order[billing_address][region_id]'); 
    shipping_address_region_id= document.getElementsByName('order[shipping_address][region_id]'); 

    var event = new Event('change'); 
    billing_address_region_id[0].addEventListener('change', getCity, false); 
    shipping_address_region_id[0].addEventListener('change', getCity, false); 
    billing_address_region_id[0].dispatchEvent(event); 
    shipping_address_region_id[0].dispatchEvent(event); 
}); 

Благодаря тонну

+0

Вы также можете поделиться некоторыми html-кодом ... –

+0

Он просто выбирает страну, провинцию и город для загрузки динамических данных. Я просто хочу, чтобы обработчик события вызывался динамическим элементом. –

+0

Вы говорите, что элементы с классом 'order [billing_address] [region_id]' и 'order [shipping_address] [region_id]' загружаются динамически. Как и когда? Или что вы подразумеваете под «динамическим элементом»? –

ответ

1

Примечание: Это решение не тестируется.

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

window.addEventListener('change', function (e) { 
    var el = e.target; 
    if (el.name == 'order[billing_address][region_id]' || el.name == 'order[shipping_address][region_id]') { 
     getKota(el.selectedIndex, el.name); 
    } 
}); 
+0

спасибо, что тонна работает правильно –

0

Ваш код будет работать только для уже существующих элементов. Я рекомендую использовать jQuery.

Используя jQuery, вы можете использовать метод «on».

$('#elem').on('change', function(){ 
 
    // Do stuff 
 
});

+1

Пожалуйста, не предлагайте использовать библиотеку, если автор не указал, что он хочет ее использовать. –

+0

спасибо, но я использую javascript только для предотвращения конфликтов с другой библиотекой javascript –

+0

ok! позвольте мне попытаться вернуться с некоторым кодом Javascript. – sidrocks

Смежные вопросы