помогите с обработчиком onclick

12
DriverCat
На сайте с 10.04.2008
Offline
116
950

Добрый день!

Была у меня когда-то функция, она принимала значение getElementById('id').value от выпадающего меню, где стоит обработчик onchange соответственно. Так как в яваскрипте я не силен, попробовал к ссылке прикрутить обработчик onclick, то есть при клике по ссылке у меня должно передаваться значение в функцию мою. Естественно ничего не работает. Как мне правильно изменить обработчик и саму функцию, чтобы она принимала значение при клике по ссылке. Помогите, пожалуйста!

alexspb
На сайте с 14.11.2005
Offline
187
#1

Желательно видеть код...

DriverCat
На сайте с 10.04.2008
Offline
116
#2

есть ссылка <a href='' onclick='javascript:sendSearchRequest();'>

К файлу подключен файл с функциями, где

function sendSearchRequest() {

function sendRequest(documentGetElementById('id').value, '', '');

}

То есть sendSearchRequest принимает как я понимаю параметр от обработчика onclick, а затем передает его в функцию sendRequest с еще другими параметрами. Но documentGetElementById('id').value - это работает для выпадающего списка - то есть берется значение value каждой опции. А как правильно обработать ссылку с onclick?

Jekyll
На сайте с 04.05.2009
Offline
136
#3

sendSearchRequest в вашем коде не принимает никаких параметров. Да они в неё и не отправляются.

function sendRequest(documentGetElementById('id').value, '', ''); - так вы описываете функцию, а не вызываете. Уберите ключевое слово function, это уже будет вызов.

alexspb
На сайте с 14.11.2005
Offline
187
#4

documentGetElementById - так и написано?

надо document.getElementById

DriverCat
На сайте с 10.04.2008
Offline
116
#5
alexspb:
documentGetElementById - так и написано?
надо document.getElementById

ДА нет, это правильно, в поспехах ошибся...

alexspb
На сайте с 14.11.2005
Offline
187
#6

Не видя всего кода - сложно решать что и где происходит

У вас хоть есть программа, которая отлавливает ошибки js?

И замечание Jekyll учли?

Jekyll:
Уберите ключевое слово function, это уже будет вызов

Дебажить надо в крайнем случае, проверить передается ли и какое значение

- в функцию sendRequest() вставить первой строкой alert(arguments[0]) и т.п.

DriverCat
На сайте с 10.04.2008
Offline
116
#7

Да нет у меня ничего, я на php пишу в основном. Вот настала необходимость, нет времени сначала изучать, поэтому и прошу помощи.

Вот например есть файл:

<html>

<head>
<script type="text/javascript" src="ajax.js"></script>
</head>
<body>
<select id='sel1' name="country" onchange="javascript:sendSearchRequest()" class="required validate-selection">
<option value='nil'>- Выберите страну -</option>";
<?=$country_list?>
<option value="all">- Все страны -</option>
</select>
<script type="text/javascript">
sendSearchRequest();
</script>
<div id="cities"></div>
</body>
</html>

И есть ajax.php


function sendSearchRequest() {
sendRequest('ajax/list.php?country=' + document.getElementById('sel1').value, 'cities', getRequest);
}
function createHttpRequest() {
var httpRequest;
var browser = navigator.appName;

if (browser == "Microsoft Internet Explorer") {
httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
} else {
httpRequest = new XMLHttpRequest();
}

return httpRequest;
}
var resultId = '';

function getXmlHttp(){
var xmlhttp;
try {
httpRequest = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
} catch (E) {
httpRequest = false;
}
}
if (!httpRequest && typeof XMLHttpRequest!='undefined') {
httpRequest = new XMLHttpRequest();
}
return xmlhttp;
}

function sendRequest(file, _resultId, getRequestProc)
{
if (file == 'ajax/list.php?country=all')
{
getXmlHttp();
file = 'ajax/list_countries.php';
resultId = 'countries';
document.getElementById(resultId).innerHTML = '<img src="/images/load.gif" alt="Loading..."/>';
httpRequest.open('get', file,true);
httpRequest.setRequestHeader("Content-Type","application/x-www-form-urlencoded;charset=windows-1251");
httpRequest.onreadystatechange = getRequestProc
httpRequest.send(null);
}
else
{
getXmlHttp();
file = 'ajax/list.php/?country='+ document.getElementById('sel1').value;
resultId = 'cities';
document.getElementById(resultId).innerHTML = '<img src="/images/load.gif" alt="Loading..."/>';
httpRequest.open('get', file,true);
httpRequest.setRequestHeader("Content-Type","application/x-www-form-urlencoded;charset=windows-1251");
httpRequest.onreadystatechange = getRequestProc
httpRequest.send(null);
}

}

function getRequest() {
if (httpRequest.readyState == 4) {
document.getElementById(resultId).innerHTML = httpRequest.responseText;
}
}

Меня интересует в первом листинге как вместо

<select id='sel1' name="country" onchange="javascript:sendSearchRequest()" class="required validate-selection">

сделать чтобы ссылка передавала значение при клике, типа:

<a href='' onclick='что здесь писать - onclick="javascript:sendSearchRequest() ????'>fgdfgd</a>

И во втором листинге функция

function sendSearchRequest() {

sendRequest('ajax/list.php?country=' + document.getElementById('sel1').value, 'cities', getRequest);
}

берет значение из выпадающего списка таким образом

document.getElementById('sel1').value
, но для тега <a> ведь нет атрибута value? Как мне тогда правильно получить доступ к значению? То есть, мне надо юту связку узел - функция правильно перестроить под работу со ссылкой но я не понимаю....
alexspb
На сайте с 14.11.2005
Offline
187
#8

DriverCat, нет разницы - php или js - надо проследить путь передаваемых переменных

у вас формируется урл, где передается значение

function sendSearchRequest() {
sendRequest('ajax/list.php?country=' + document.getElementById('sel1').value, 'cities', getRequest);
}

вместо списка, вы хотите ссылки, sendRequest() использует значение

document.getElementById('sel1').value

вам надо передать функции другое значение, как - вопрос удобства

решение в лоб, делаем ссылки с id соответствующими списку и передаем значение

<a id='a1' href='#' onclick='sendSearchRequest2(this.id);return false;'>11111</a>
<a id='a2' href='#' onclick='sendSearchRequest2(this.id);return false;'>22222</a>
<a id='all' href='#' onclick='sendSearchRequest2(this.id);return false;'>all</a>

создайте другую функцию

function sendSearchRequest2() {
sendRequest('ajax/list.php?country=' + arguments[0], 'cities', getRequest, arguments[0]);
}

в самой функции sendRequest() надо заменить

file = 'ajax/list.php/?country='+ document.getElementById('sel1').value;

на

file = 'ajax/list.php?country='+ arguments[3];//там еще слэш лишний

Дальше, надеюсь, разберетесь

DriverCat
На сайте с 10.04.2008
Offline
116
#9
alexspb:
DriverCat, нет разницы - php или js - надо проследить путь передаваемых переменных

у вас формируется урл, где передается значение

вместо списка, вы хотите ссылки, sendRequest() использует значение
document.getElementById('sel1').value
вам надо передать функции другое значение, как - вопрос удобства
решение в лоб, делаем ссылки с id соответствующими списку и передаем значение


создайте другую функцию
в самой функции sendRequest() надо заменить
file = 'ajax/list.php/?country='+ document.getElementById('sel1').value;
на
file = 'ajax/list.php?country='+ arguments[3];//там еще слэш лишний

Дальше, надеюсь, разберетесь

Спасибо Вам большое за потраченное время, все работает, разобрался!

Единственное не понял вот эту строчку:

sendRequest(arguments[0], 'how_to_add', getRequest, arguments[0]);
- зачем четвертый параметр? И без него вроде работает? =)
SergejDergatsjev
На сайте с 22.08.2009
Offline
19
#10

В дебри лезете господин.

Юзайте jquery

http://www.danvega.org/blog/index.cfm/2008/7/1/jQuery-Select-Example

Стандартная проблема миллион раз решалась.

http://docs.jquery.com/Main_Page

eEcho build a database-driven web sites. Let us build your web site! (http://www.eecho.info)
12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий