[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: select
qaz333
Всем приет, вот возник такой вопрос,

есть тег
<select>
<option>сайт1</option>
<option>сайт2</option>
<option>сайт3</option>
<option>сайт4</option>
</select>

как дописать джаваскрипт штоб например при нажатиии на сайтё1 вывобилась ниже какаято информация или например отсилалстя пост запрос и ниже выводился его результат, подскажите



Спустя 3 минуты, 58 секунд (28.06.2011 - 22:48) quickxyan написал(а):
ну это надо думаю через аякс делать.


Спустя 5 минут, 9 секунд (28.06.2011 - 22:54) killer8080 написал(а):
qaz333
тегу select нужно задать обработчик onchange
<select onchange="alert(this.value)">
<option>
сайт1</option>
<option>
сайт2</option>
<option>
сайт3</option>
<option>
сайт4</option>
</select>

Спустя 9 часов, 22 минуты, 4 секунды (29.06.2011 - 08:16) nugle написал(а):
quickxyan
не обязательно аякс, можно сразу в файле прописать

Спустя 6 часов, 32 минуты, 19 секунд (29.06.2011 - 14:48) qaz333 написал(а):
есть ещо дельные предложения?

Спустя 25 минут (29.06.2011 - 15:13) killer8080 написал(а):
qaz333
Есть Начинай учить JS smile.gif
Тебе же показали как назначается обработчик событий селекта, пиши функцию которая будет делать то, что тебе надо по задаче, и пропиши её в onchange.

Спустя 20 часов, 6 минут, 3 секунды (30.06.2011 - 11:19) qaz333 написал(а):
та я начал учить, но штото неочень ещо ролучается

вот што у меня получилось, но остались некоторые нюансы которые немогу исправить, знаний нехватает, можете помоч



echo "<select name ='a' onchange= 'fak()'>";
echo "<option>Пусто</option>";
$sssd= mysql_query("SELECT distinct `ref` FROM `info` WHERE `data` = DATE(NOW()) ");
while($vssd = mysql_fetch_assoc($sssd))
{

echo "<option>";
echo $vssd['ref'];
echo "</option>";




}
echo "</select>";
echo "<br>";
echo "<br>";

?>
<script language="JavaScript">
function
fak()
{
var a= document.getElementsByTagName("select")[0].value;
var xml = newXMLHttpRequest();
xml.open('POST' , 'index.php', false);
xml.send(a);
if(xml.readstate == 4)
{
alert(xml.responseText);
}
}

</script>
<?



$aa = !empty($_POST['a'])?$_POST['a']:NULL;


$sqxqq= mysql_query("SELECT distinct `srt` FROM `info` WHERE `data` = DATE(NOW()) and `ref`= '".$aa."' ");
while($vqc = mysql_fetch_assoc($sqxqq))
{
echo $vqc['srt'].' - ';

$sqlzbq= mysql_query("SELECT distinct `ip` FROM `info` WHERE `data` = DATE(NOW()) and `srt`= '".$vqc['srt']."' and `ref`= '".$aa."' ");
$tbq=mysql_num_rows($sqlzbq);
echo "<font color='#FF0000'>";
echo $tbq;
echo '</font>';
echo "<br>";
}

Спустя 1 час, 28 минут, 19 секунд (30.06.2011 - 12:47) killer8080 написал(а):
Ну начнём с замечаний:
1. гораздо удобней передать ссылку на селект через аргумент вызова, чем отковыривать его через DOM, то есть не так
<select name ='a' onchange= 'fak()'>

а так
<select name ='a' onchange= 'fak(this)'>

соответственно в коде функции вместо
function fak()
{
var a= document.getElementsByTagName("select")[0].value;
...


нужно указть переменную в аргументе
function fak(a)
{
...



2. неправильно инициируешь xmlhttprequest, пропущен пробел после new
var xml = new XMLHttpRequest();

к тому же этот обьект отсутствует в IE, там используется activeX компонент. О том как правильно работать с ajax читай здесь
function getXmlHttp(){
var xmlhttp;
try {
xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch (E) {
xmlhttp = false;
}
}

if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
xmlhttp = new XMLHttpRequest();
}
return xmlhttp;
}
Есть и другие варианты, можно использовать библиотеки, например jQuery, JSHttpRequest (библиотека Котерова) и т.п.

3. обрабатываться AJAX запросы должны отдельным скриптом, а не тем же index.php, что и сама страница.

4. Тэг font считается устаревшим, и вместо него лчше использовать span и стили
<span style="color:#FF0000">


Ну вот вкратце :)

Спустя 6 часов, 5 минут, 50 секунд (30.06.2011 - 18:53) qaz333 написал(а):
ну хорошо, исправил


<script language="JavaScript">
function
fak(a)
{

var xml = new XMLHttpRequest();
xml.open('POST' , 'index.php', false);
xml.send(a);
if(xml.readstate == 4)
{
alert(xml.responseText);
}


}

</script>


што теперь неправильно?

Спустя 1 час, 21 минута, 35 секунд (30.06.2011 - 20:15) Winston написал(а):
Цитата (qaz333 @ 30.06.2011 - 18:53)
што теперь неправильно

Попробуй открыть консоль ошибок и посмотреть.

Вот
if(xml.readstate == 4) !== if(xml.readyState == 4)

Спустя 2 часа, 26 минут, 3 секунды (30.06.2011 - 22:41) killer8080 написал(а):
qaz333
видать невнимательно ты читал статью на которую я дал ссылку. Зачем использовать синхронный режим, когда есть асинхронный. Для этого третий аргумент метода open должен быть true.
xml.open('POST' , 'index.php', true);

соответственно нужно назначить обработчик onreadystatechange
во вторых как именно вызывается обработчик, если так
<select name ='a' onchange= 'fak(this)'>

то переменная a содержит ссылку на объект, тогда отправлять запрос нужно так
xml.send(a.value);

ну и на другую ошибку уже указал PHPprogramer

код должен выглядеть примерно так

<script type="text/javascript">
<![
CDATA[

function getXmlHttp(){
var xmlhttp;
try {
xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch (E) {
xmlhttp = false;
}
}

if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
xmlhttp = new XMLHttpRequest();
}
return xmlhttp;
}

function fak(a){
var xml = getXmlHttp();
xml.open('POST' , 'index.php', true);
xml.onreadystatechange = function() {
if (xml.readyState == 4) {
alert(xml.responseText);
}
}
;
xml.send(a.value);
}
]]>
</
script>


PS атрибут language в теге script лучше не использовать, так как это не стандарт, он не входит в официальные спецификации w3c. Это непозволит пройти валидацию, если конечно она имеет значение.

Спустя 20 минут, 53 секунды (30.06.2011 - 23:02) Winston написал(а):
Цитата (killer8080 @ 30.06.2011 - 22:41)
Это непозволит пройти валидацию, если конечно она имеет значение.

У меня нормально проходит.

Я пишу так
Если при вставке в страниуц
<script language="JavaScript">
.....
</
script>

А так когда подключаю
<script type="text/JavaScript"></script>


Мне это кажется более логичнее.

Спустя 8 минут, 28 секунд (30.06.2011 - 23:10) killer8080 написал(а):
Цитата (PHPprogramer @ 30.06.2011 - 23:02)
У меня нормально проходит.

всё зависит от доктайпа
Цитата (PHPprogramer @ 30.06.2011 - 23:02)
Мне это кажется более логичнее.

логично следовать стандартам, если веб консорциум не рекомендует, то лучше воздержаться от его применения.
proof

Цитата
Attribute definitions
src = uri [CT]
This attribute specifies the location of an external script.
type = content-type [CI]
This attribute specifies the scripting language of the element's contents and overrides the default scripting language. The scripting language is specified as a content type (e.g., "text/javascript"). Authors must supply a value for this attribute. There is no default value for this attribute.
language = cdata [CI]
Deprecated. This attribute specifies the scripting language of the contents of this element. Its value is an identifier for the language, but since these identifiers are not standard, this attribute has been  deprecated in favor of type.
defer [CI]
When set, this boolean attribute provides a hint to the user agent that the script is not going to generate any document content (e.g., no "document.write" in javascript) and thus, the user agent can continue parsing and rendering.

Спустя 10 часов, 24 минуты, 3 секунды (1.07.2011 - 09:34) qaz333 написал(а):
Цитата (killer8080 @ 30.06.2011 - 19:41)
qaz333
видать невнимательно ты читал статью на которую я дал ссылку. Зачем использовать синхронный режим, когда есть асинхронный. Для этого третий аргумент метода open должен быть true.
xml.open('POST' , 'index.php', true);

соответственно нужно назначить обработчик onreadystatechange
во вторых как именно вызывается обработчик, если так
<select name ='a' onchange= 'fak(this)'>

то переменная a содержит ссылку на объект, тогда отправлять запрос нужно так
xml.send(a.value);

ну и на другую ошибку уже указал PHPprogramer

код должен выглядеть примерно так

<script type="text/javascript">
<![
CDATA[

function getXmlHttp(){
var xmlhttp;
try {
xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch (E) {
xmlhttp = false;
}
}

if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
xmlhttp = new XMLHttpRequest();
}
return xmlhttp;
}

function fak(a){
var xml = getXmlHttp();
xml.open('POST' , 'index.php', true);
xml.onreadystatechange = function() {
if (xml.readyState == 4) {
alert(xml.responseText);
}
}
;
xml.send(a.value);
}
]]>
</
script>


PS атрибут language в теге script лучше не использовать, так как это не стандарт, он не входит в официальные спецификации w3c. Это непозволит пройти валидацию, если конечно она имеет значение.

код серовно не пашет, никакой реакции
+добавил ту консоль ошибок, тоже никакой реакции

вот што получилось в итоге

echo "<form action='' method ='post'>";
echo "<select name ='a' onchange= 'fak(this)'>";
echo "<option>Пусто</option>";
$sssd= mysql_query("SELECT distinct `ref` FROM `info` WHERE `data` = DATE(NOW()) ");
while($vssd = mysql_fetch_assoc($sssd))
{

echo "<option>";
echo $vssd['ref'];
echo "</option>";




}
echo "</select>";
echo "<input type='submit' value = 'проверить'>";
echo "</form>";
echo "<br>";
echo "<br>";

?>
<script type="text/javascript">
<![CDATA[

function getXmlHttp(){
var xmlhttp;
try {
xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch (E) {
xmlhttp = false;
}
}

if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
xmlhttp = new XMLHttpRequest();
}
return xmlhttp;
}

function fak(a){
var xml = getXmlHttp();
xml.open('POST' , 'index.php', true);
xml.onreadystatechange = function() {
if (xml.readyState == 4) !== if(xml.readyState == 4) {
alert(xml.responseText);
}
}
;
xml.send(a.value);
}
]]>
</script>
<?



$aa = !empty($_POST['a'])?$_POST['a']:NULL;

Спустя 3 часа, 32 минуты, 17 секунд (1.07.2011 - 13:07) Winston написал(а):
Цитата (qaz333 @ 1.07.2011 - 09:34)

        if (xml.readyState == 4) !== if(xml.readyState == 4)

:blink:
Ну вы даете, я же вам указал на то что вы неверно писали readyState, а вы взяли и скопипастили мой код.

Ту строку которая у меня в цитате, замените на эту
if(xml.readyState == 4)

Спустя 1 час, 30 минут, 52 секунды (1.07.2011 - 14:37) killer8080 написал(а):
qaz333
ну так я же уже говорил
Цитата (killer8080 @ 30.06.2011 - 12:47)
3. обрабатываться AJAX запросы должны отдельным скриптом, а не тем же index.php, что и сама страница.

делаешь отдельно index.php, отдельно load.php для обработки ajax запросов. Вот простой пример:
index.php
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<
html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ru" lang="ru">

<
head>
<
meta http-equiv="content-type" content="text/html; charset=utf-8" />

<
title>Test</title>
</
head>

<
body>

<
form action="" method ="post">
<
select name ="a" onchange= "fak(this)">
<
option>Пусто</option>
<
option>ref</option>
</
select>
<
input type="submit" value = "проверить"/>
</
form>
<
br/>
<
br/>


<
script type="text/javascript">
/*<![CDATA[*/

function getXmlHttp(){
var xmlhttp;
try {
xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch (E) {
xmlhttp = false;
}
}

if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
xmlhttp = new XMLHttpRequest();
}
return xmlhttp;
}

function fak(a){
var param = 'a='+encodeURIComponent(a.value);
var xml = getXmlHttp();
xml.open('POST' , 'load.php', true);
xml.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
xml.onreadystatechange = function() {
if (xml.readyState == 4) {
alert(xml.responseText);
}
}
;
xml.send(param);
}
/*]]>*/
</script>

</
body>
</
html>


load.php
<?php

header("Content-type: text/html; charset=utf-8");
echo "ответ сервера: \r\n".$_POST['a'];

?>

Спустя 8 часов, 26 минут, 41 секунда (1.07.2011 - 23:04) qaz333 написал(а):
чёт я немного непонял, ну сделаю я лоад.пхп
в котором будет такой код обрботчик

$aa = !empty($_POST['a'])?$_POST['a']:NULL;


$sqxqq= mysql_query("SELECT distinct `srt` FROM `info` WHERE `data` = DATE(NOW()) and `ref`= '".$aa."' ");
while($vqc = mysql_fetch_assoc($sqxqq))
{
echo $vqc['srt'].' - ';

$sqlzbq= mysql_query("SELECT distinct `ip` FROM `info` WHERE `data` = DATE(NOW()) and `srt`= '".$vqc['srt']."' and `ref`= '".$aa."' ");
$tbq=mysql_num_rows($sqlzbq);
echo "<font color='#FF0000'>";
echo $tbq;
echo '</font>';
echo "<br>";
}

echo "<br>";
echo "<br>";
echo "<br>";


каким образом мне всё ето вернуть и вывести на страницу index.php?

Спустя 26 минут, 35 секунд (1.07.2011 - 23:31) Winston написал(а):
qaz333
Создаешь в index.php блок
например
<div id='myDiv'>
</div>

Потом этот код
    xml.onreadystatechange = function() {
if (xml.readyState == 4) {
alert(xml.responseText);
}

Заменяешь на этот

var myDiv = document.getElementById('myDiv');
xml.onreadystatechange = function() {
if (xml.readyState == 4) {
myDiv.innerHTML = xml.responseText;
}

Обработчик пока не разберешься оставь такой как предложил киллер.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.