Мой главный вопрос: как мы можем установить двух слушателей событий, что один из них действует на основе другого? например: У нас есть много записей, что внутри него у нас много похожих семейств, когда мы ищем на основе семейного фильтра наши записи, ограниченные меньшим количеством всей таблицы, но у нас есть и другой фильтр, который нас ищет между аналогичными семействами (второй фильтр, основанный на имени) и помните оба поля фильтра (мастер aka family, slave aka name), должны реагировать на событие «keyup» и активно играть с результатами. извините за мой плохой английский. :)javaScript-как мы можем установить eventListener как подчиненный другой eventListener?
JavaScript:
(function() {
var frm = document.forms.frm1;
var dmsg = document.getElementById('dmsg');
var clear = document.getElementById('clear');
function displayGivenObjectInfo(event) {
var res;
eval('res = ' + frm.jsvar.value + ';');
var resTable = filteredPropertiesTable(res, frm.pfilter.value);
var resStr = document.createElement('div');
resStr.className = 'res';
var rtitleStr = document.createElement('div');
rtitleStr.className = 'rtitle';
var text = document.createTextNode(frm.jsvar.value + '={' + res + '} ' + 'filtered by:');
rtitleStr.appendChild(text);
var refil = document.createElement('input');
refil.type = 'text';
refil.className = 'refilter';
refil.setAttribute('value', frm.pfilter.value);
rtitleStr.appendChild(refil);
var prefil2 = document.createElement('input');
prefil2.type = 'text';
prefil2.className = 'propfilter';
prefil2.setAttribute('value','');
rtitleStr.appendChild(prefil2);
var rtextStr = document.createElement('div');
rtextStr.className = 'rtext';
rtextStr.appendChild(resTable);
resStr.appendChild(rtitleStr);
resStr.appendChild(rtextStr);
dmsg.appendChild(resStr);
// setup filter change event for the last added expression results
for (var i = 0; i < dmsg.getElementsByClassName('refilter').length; i++) {
var refilterInput = dmsg.getElementsByClassName('refilter')[i];
refilterInput.addEventListener('keyup', function() {
var rtextDiv = refilterInput.parentNode.parentNode.getElementsByClassName('rtext')[0];
while (rtextDiv.firstChild) {
rtextDiv.removeChild(rtextDiv.firstChild);
}
rtextDiv.appendChild(filteredPropertiesTable(res, refilterInput.value));
});
}
event.preventDefault(); // prevent referesh of page because of form post back
};
function filteredPropertiesTable(res, filter) {
var regExp = new RegExp('\\S*' + filter + '\\S*', 'i'); // regular expression for filtering
var resTable = document.createElement('table');
if (typeof res != 'string')
for (key in res)
if (regExp.test(key)) {
var tempr = document.createElement('tr');
var tempdl = document.createElement('td');
var text = document.createTextNode(key);
tempdl.appendChild(text);
var tempdr = document.createElement('td');
text = document.createTextNode(res[key]);
tempdr.appendChild(text);
tempr.appendChild(tempdl);
tempr.appendChild(tempdr);
resTable.appendChild(tempr);
}
return resTable;
};
function clearDisplay(event) {
dmsg.innerHTML = '';
event.preventDefault();
};
if (frm.addEventListener) {
frm.addEventListener('submit', displayGivenObjectInfo);
clear.addEventListener('click', clearDisplay);
} else if (frm.attachEvent) {
frm.attachEvent('onsubmit', displayGivenObjectInfo);
clear.attachEvent('onclick', clearDisplay);
}
})();
в этом JS код, который я два текстовых поля, что один из них работает отлично и есть EventListener. , но для второго входа (prefil2) i'cant установил прослушиватель событий, чтобы реагировать с результатами (refil) другого ввода.
примечание: это unrelative, но если вы хотите испытать что-то с моим кодом просят меня предоставить HTML/CSS, если я добавить его здесь часть кода будет слишком долго, и это против roles.tnx full code here
не понимают, о чем вы говорите ... – Leo
Покажите, что у вас есть – Gabs00
ok позвольте мне привести код, извините за мое плохое представление. – Francesco