Не срабатывают события из HTML
Добрый день, у меня такая проблема:
события срабатывают из JS: document.getElementById('start').onclick = function (){ //код }, но не срабатывают из HTML function clear(){ //код } <input type="text" onKeyDown="clear()" size="20" id="start"> В чем может быть проблема? |
можно использовать onkeydown="window.clear()" либо поменяйте имя функции
|
devastor,
покажи полный код или хотя бы ошибки. |
тест
<script> function clear(){ console.log("test 1:"); console.log(document.clear === clear); console.log(window.clear === clear); } clear(); </script> <button onclick="console.log('test 2:'); console.log(document.clear === clear); console.log(window.clear === clear);">click</button> |
Полный код JS
<script src="//api-maps.yandex.ru/2.1/?lang=ru_RU" type="text/javascript"></script> ymaps.ready(init); function clear(){ console.log("test 1:"); console.log(document.clean === clean); console.log(window.clean === clean); myCollection.removeAll(); geolocation.get({ provider: 'yandex', mapStateAutoApply: true }).then(function (result) { result.geoObjects.get(0).properties.set({}); myMap.geoObjects.add(result.geoObjects); }); clear(); } function init() { //создаём карту var geolocation = ymaps.geolocation, myMap = new ymaps.Map('map', { center: [54.724403, 55.970748], zoom: 10, controls: [] }); var myCollection = new ymaps.GeoObjectCollection(); //отключение движения карты и масштабирования myMap.behaviors.disable(['drag','rightMouseButtonMagnifier', 'scrollZoom', 'dblClickZoom', 'multiTouch']); document.getElementById('load').onclick = function () { if (document.getElementById('start').value != null){ //Строим Маршрут, по точкам, с учётом пробок var start = document.getElementById('start').value; var finish = document.getElementById('finish').value; ymaps.route([start, finish], {avoidTrafficJams: true, mapStateAutoApply: true}).then( function (route) { myCollection.add(route); myMap.geoObjects.add(myCollection); document.getElementById('city').value = (route.getLength()/1000).toFixed(1) + ' километров'; document.getElementById('timenone').value = timeformat(route.getTime()); document.getElementById('timeprob').value = timeformat(route.getJamsTime()); document.getElementById('price').value = price((route.getLength()/1000).toFixed(1)) + ' руб'; }, function (error) { if(error.message == "can't construct a route") { alert("При построении маршрута возникла ошибка.\r\nПопробуйте изменить адреса или перезагрузить страницу."); } else { alert("Возникла ошибка: " + error.message); } } ); } } //функция расчета стоимости function price(length){ var price = 30 + (length * 12); if (price < 100) { price = 100;} return price.toFixed(0); } //функция правильного вывода часов и минут function timeformat(time){ var twotime = time = time /60; if (time >= 60){ time = Math.floor(time / 60); var minuts = twotime - (time * 60); var hour; switch (true) { case time == 1: hour = ' час'; break case time >= 2 && time < 5: hour = ' часа'; break case time > 5: hour = ' часов'; break default: hour = ' час'; break } minuts = minutstime(minuts); return time + hour +' '+ minuts; } return minutstime(twotime); } // вспомогательная функция для правильного вывода минут function minutstime(minuts){ minuts = minuts.toFixed(0); var timemin; switch (true) { case minuts == 1: timemin = minuts + ' минута'; break case timemin >= 2 && timemin < 5: timemin = minuts + ' минуты'; break case timemin > 5: timemin = minuts + ' минут'; break default: timemin = minuts + ' минут'; break } return(timemin); } }; И HTML <body style="padding:0px; margin:0px; height:2000px;"> <div id="map" style="width: 100%; position: absolute; height: 70%; padding:0px; margin:0px; z-index:1;"></div> <div style="padding:10px; position: absolute; z-index:2; background:#FFF; margin:30px 25% 0 0; opacity:.8;"> <form method="post" action="javascript:insert()"> <table border="0" cellspacing="0" cellpadding="0"> <tr> <td>Начало:</td> <td><input type="text" onkeydown="window.clear()" size="20" id="start" value="Алкино-2" ></td> </tr> <tr> <td>Финиш:</td> <td><input type="text" onkeydown="window.clear()" size="20" id="finish" value="Уфа, Путейская 1Б" ></td> </tr> <tr></tr> <tr> <td>Расстояние:</td> <td><input type="text" size="20" id="city" ></td> </tr> <tr> <td>Время без учета пробок:</td> <td><input type="text" size="20" id="timenone"></td> </tr> <tr> <td>Время с учетом пробок:</td> <td><input type="text" size="20" id="timeprob"></td> </tr> <tr> <td>Стоимость:</td> <td><input type="text" size="20" id="price"></td> </tr> <tr> <INPUT TYPE="SUBMIT" VALUE ="Принять заказ"></form> <button id="load">Расчитать</button> <button onclick="return location.href = 'http://test.devastor.ru/taxi/zakaz.php'" > ЗАКАЗЫ</button> <button onclick="console.log('test 2:'); console.log(document.clean === clean); console.log(window.clean === clean);">click</button> </tr> </table> </div> </body> На JS пишу второй день, так что сильно палками прошу не бить :) При этом console.log("test 1:"); не срабатывает однозначно даже при явном вызове ниже |
Если делаю document.clear(), либо просто clear(), то ошибок не выдаёт, но и не срабатывает, если делаю window.clear то выдаёт ошибку
TypeError: window.clear is not a function |
Решил перевызовом функции, всем спасибо!
|
devastor,
каким ещё перевызовом? Несколько замечаний: 1. В конце функции clear() она вызывает сама себя без всякого условия, а это не хорошо. Да и зачем? 2. Когда я смотрел код, то увидел, что переменные myCollection и geolocation у тебя локальные, и определяются в одних функциях, а используются в других. Это должно приводить к ошибкам. 3. Функции insert() нет в коде, следовательно будет ошибка при отправке. |
Цитата:
Цитата:
может уже подумать об этом? |
А есть возможность использования примерно следующего
//данный код не рабочий и служит для показания, того что необходимо ((document.getElementById('id1').[событие]) ||(document.getElementById('id2').[событие])) = function(){ //тело } Т.е что бы одну функцию можно было вызвать событиями нескольких элементов не прибегая к <input type="text" [событие]="[имя]"> |
Часовой пояс GMT +3, время: 00:53. |