Помогите разобраться
Здравствуйте!
Написал Ajax приложение для поиска улиц. _http://test.***.ru/streets.html До вывода списка найденных улиц функция past_street(); работает успешно (заменяет значение в поле формы), но после того как появляется <select> при нажатии на "вставить" или на значение в выпадающем списке ничего не происходит. В чём может быть проблема? |
Во-первых, как сделать, чтоб появился select?
Во-вторых, лучше работайте с DOM методами, а не получением элементов из свойств объектов: function past_street(street) { document.getElementsByName('street')[0].value=street; } var request = null; function createRequest() { try { request = new XMLHttpRequest(); } catch (trymicrosoft) { try { request = new ActiveXObject("Msxml2.XMLHTTP"); } catch (othermicrosoft) { try { request = new ActiveXObject("Microsoft.XMLHTTP"); } catch (failed) { request = null; } } } if (request == null) alert("Error creating request object!"); } function send() { createRequest(); street = document.getElementsByName('street')[0].value; if(street.length > 3) { var url = "streets.php?street=" + street; request.open("GET", url, true); request.onreadystatechange = update; request.send(null); } } function update() { if(request.readyState == 4) { if(request.status == 200) { var response_div = document.getElementById("response"); response_div.innerHTML = request.responseText; } else alert("Error! Request status is " + request.status); } } |
Спасибо большое, помогло!
function past_street(street) { document.getElementsByName('street')[0].value=street; } Select генерируется с помощью PHP. |
telepat mode: возможно, после добавления чего-либо в dom нужно повторно назначить обработчик
|
Цитата:
|
В IE вообще ничего не работает, вот пример _http://www.italii.ru/catalogue/
При вводе слова в форму например "max" появляются подсказки, всё работает в Opere и Firefox, но в IE нет. Что только не делал. В чём проблема? function past_result(search) { if(navigator.appName == "Microsoft Internet Explorer") { document.forms['search_form'].elements['search'].value = search; } else if(navigator.appName == "Opera") { document.forms['search_form'].elements['search'].value = search; } else if(navigator.appName == "Netscape") { document.getElementsByName('search')[0].value=search; } else { document.forms['search_form'].elements['search'].value = search; } var response_div = document.getElementById("response"); response_div.innerHTML = ''; } var request = null; function createRequest() { try { request = new XMLHttpRequest(); } catch (trymicrosoft) { try { request = new ActiveXObject("Msxml2.XMLHTTP"); } catch (othermicrosoft) { try { request = new ActiveXObject("Microsoft.XMLHTTP"); } catch (failed) { request = null; } } } if (request == null) alert("Error creating request object!"); } function send() { createRequest(); //search = document.forms[0].search.value; search = document.forms['search_form'].elements['search'].value; if(search.length > 1) { if(navigator.appName == "Microsoft Internet Explorer") { var url = "http://www.italii.ru/xajax/ajax_search.php?iconv&search=" + search; } else if(navigator.appName == "Opera") { var url = "http://www.italii.ru/xajax/ajax_search.php?iconv&search=" + search; } else if(navigator.appName == "Netscape") { var url = "http://www.italii.ru/xajax/ajax_search.php?search=" + search; } else { var url = "http://www.italii.ru/xajax/ajax_search.php?iconv&search=" + search; } request.open("GET", url, true); request.onreadystatechange = update; request.send(null); } else { var response_div = document.getElementById("response"); response_div.innerHTML = ''; } } function update() { if(request.readyState == 4) { if(request.status == 200) { var response_div = document.getElementById("response"); response_div.innerHTML = request.responseText; } else alert("Error! Request status is " + request.status); } } Пришлось даже с navigator.appName извратиться. |
ошибки какие-то выдаются в ie?
не надо тут с navigator.appName извращаться: используй utf-8 |
Я то с радостью использовать utf-8, но клиенту не докажешь.
По поводу IE Строка: 40 Ошибка: Объект не поддерживает это свойство или метод. |
а клиент такие умные слова знает O_o может попробовать сменить клиента? ;)
какая строка 40-ая? Лучше включи отладчик и посмотри, на какой строке он остановился |
Цитата:
|
Дело то не в кодировке.
Вернёмся к скрипту. 40 строка. search = document.forms['search_form'].elements['search'].value; if(search.length > 1) { |
Разве свойство elements у формы во всех браузерах есть?
|
Цитата:
Цитата:
p.s. зачем создавать глобальные переменные (search, например) |
Цитата:
|
Цитата:
|
FireFox определяется как Netscape.
Про 40 строку IE показал, придётся через отладчик разбираться. Про глобальные переменные как-то не задумывался. |
Цитата:
var isIE = navigator.userAgent.indexOf('Mozilla') != -1 Черт, все браузеры как IE определяются. |
Нет, можете проверить alert(navigator.appName);
|
ну давайте тогда глянем, как это делается в фреймворках (конечно, не истина в последней инстанции), может кто-то даже прокомментирует
prototype (хоть его и ругали уже сегодня) Browser: (function(){ var ua = navigator.userAgent; var isOpera = Object.prototype.toString.call(window.opera) == '[object Opera]'; return { IE: !!window.attachEvent && !isOpera, Opera: isOpera, WebKit: ua.indexOf('AppleWebKit/') > -1, Gecko: ua.indexOf('Gecko') > -1 && ua.indexOf('KHTML') === -1, MobileSafari: /Apple.*Mobile.*Safari/.test(ua) } })(), jQuery jQuery.browser = { version: (userAgent.match( /.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/ ) || [0,'0'])[1], safari: /webkit/.test( userAgent ), opera: /opera/.test( userAgent ), msie: /msie/.test( userAgent ) && !/opera/.test( userAgent ), mozilla: /mozilla/.test( userAgent ) && !/(compatible|webkit)/.test( userAgent ) }; mootools var Browser = $merge({ Engine: {name: 'unknown', version: 0}, Platform: {name: (window.orientation != undefined) ? 'ipod' : (navigator.platform.match(/mac|win|linux/i) || ['other'])[0].toLowerCase()}, Features: {xpath: !!(document.evaluate), air: !!(window.runtime), query: !!(document.querySelector)}, Plugins: {}, Engines: { presto: function(){ return (!window.opera) ? false : ((arguments.callee.caller) ? 960 : ((document.getElementsByClassName) ? 950 : 925)); }, trident: function(){ return (!window.ActiveXObject) ? false : ((window.XMLHttpRequest) ? 5 : 4); }, webkit: function(){ return (navigator.taintEnabled) ? false : ((Browser.Features.xpath) ? ((Browser.Features.query) ? 525 : 420) : 419); }, gecko: function(){ return (document.getBoxObjectFor == undefined) ? false : ((document.getElementsByClassName) ? 19 : 18); } } }, Browser || {}); ну и стоит отметить, что browser detection considered harmful p.s. твой вариант, maxsoftware, выглядит довольно древним |
Думаешь это имеет отношение к ошибке?
|
нет, это советы по остальным проблемам твоего кода. По ошибке на данный момент я уже все посоветовал, что мог (что за строка ты все еще не сказал)
|
Часовой пояс GMT +3, время: 11:50. |