ФорумПрограммированиеПыхнуть хотите?F.A.Q. → Интерактивный select без перезагрузки страницы

Интерактивный select без перезагрузки страницы

  • Malin-ka

    Сообщения: 83 Репутация: N Группа: Кто попало

    Spritz 22 ноября 2009 г. 3:01, спустя 1 час 40 минут 7 секунд

    Логику я понимаю, а можно это в коде показать ?
  • Malin-ka

    Сообщения: 83 Репутация: N Группа: Кто попало

    Spritz 22 ноября 2009 г. 4:12, спустя 1 час 11 минут 4 секунды

    У меня есть вот такой код :
    $(document).ready(function()
    {$("#username").blur(function() { $("#msgbox").removeClass().addClass('messagebox').text('Проверка…').fadeIn("slow");
    $.post("user_availability.php",{ user_name:$(this).val() } ,function(data) {


    if(data=='no')
    {$("#msgbox").fadeTo(200,0.1,function() {$(this).html('логин занят').addClass('messageboxerror').fadeTo(900,1); }); }

    else
    {$("#msgbox").fadeTo(200,0.1,function() {$(this).html('Логин доступен').addClass('messageboxok').fadeTo(900,1); }); }



    }); }); });


    вроде он не сложный, но я уже 2 дня не могу их скрестить.
    Может кто-нибудь мне поможет ?
  • Trej Gun

    Сообщения: 5305 Репутация: N Группа: в ухо

    Spritz 22 ноября 2009 г. 5:05, спустя 53 минуты 32 секунды

    fadeTo(200,0.1,function()

    у тебя прозрачность в обоих случаях
  • Malin-ka

    Сообщения: 83 Репутация: N Группа: Кто попало

    Spritz 22 ноября 2009 г. 5:50, спустя 44 минуты 21 секунду

    Здесь по идее нужно вместо function(data) указывать наш doload (без $.post конечно), а к ответу прицепить любую строчку в IF.
    Я вместо msgbox пишу result (id нашего дива)…а что делать с #username ? С ним не работает, без него если и работает, то рэзко, а я люблю, когда всё плавно, ну вы понимаете :)
  • Malin-ka

    Сообщения: 83 Репутация: N Группа: Кто попало

    Spritz 22 ноября 2009 г. 9:32, спустя 3 часа 42 минуты 29 секунд

    Удалось получить такую смесь:
    $(document).ready(function() {

    $("#prfl").blur(function() {
    $("#result").text('Загрузка…').fadeIn("slow");
    $.post("back-end.php",{ send-var :$(this).val() } ,function(data) {

    if(data=='no') {
    $("#result").fadeTo(200,0.1,function() {
    $(this).html('Ошибка').fadeTo(900,1); }); }

    else {$("#result").fadeTo(200,0.1,function() {
    $(this).html(data).fadeTo(900,1); }); }

    }); }); });

    Поправьте пожалуйста, кто умеет, чтобы оно СРАЗУ выводилось, а не по нажатию мышки на свободное место,
    и вобщем-то JSHTTPREQUEST вооще не нужен !
    Спустя 100 сек.
    send-var - всмысле sendvar - переменная, которую передаем в бэк-енд.
  • Malin-ka

    Сообщения: 83 Репутация: N Группа: Кто попало

    Spritz 22 ноября 2009 г. 18:30, спустя 8 часов 58 минут 9 секунд

    Всё. Победила !
    Если есть JQUERY - JSHTTPREQUEST в печку - 4 строчки кода !
    Всем спасибо, охренеть, как помогли ! :)
  • churlena

    Сообщения: 1 Репутация: N Группа: Кто попало

    Spritz 24 ноября 2009 г. 3:17, спустя 1 день 8 часов 47 минут

    всем привет!помогите пожалуйста новичку =)
    задача у меня такая - есть бд автомобилей, водителей и т.д. нужно при выборе из списка автомобиля формировать список водителей, выбирать водителя и заполнять ещё 2 поля.и при нажатии на ссылку "добавить" добавляется новая строка.и в ней должно то же самое работать.
    Пользуясь статьёй http://pyha.ru/articles/php/ajax-select/ , написала код на php и js. ошибка в том, что когда во второй и последующих строчках выбираю автомобиль, то изменяется не текущий список автомобилей(в этой строчке), а список из верхней(первой) строчки
    Используется 2 файла:
    <html>
    <head><LINK REL=STYLESHEET TYPE="text/css" HREF="style.css">
    <title>Ввод данных - касса</title>
    </head>
    <body>
    <h2> <center>Касса - сдано за план</center> </h2> <br>
    <?php
    include("mysql.inc");

    ?>

    <form action="kassa_result.php" method="post">

    Дата: <input type="date" name="date" ><br></br>


    <span id="table">


    <table  width = "90%" border = "0" cellpadding="2" cellspacing = "0" BGCOLOR=DCDCDC>
    <tr>
    <td ><b>Гос. № а/м</b></td>
    <td ><b>Водитель</b></td>
    <td ><b>Сумма на план</b></td>
    <td ><b>Сумма за ремонт и з/ч</b></td>
    <td><a href="#" onclick="return addline();">добавить</a></td>
    </tr>
    <tr id="newline" nomer="[0]">
    <td>
    <script language="JavaScript" src="JsHttpRequest.js"></script>

    <script language="JavaScript">
    function doload(value){
    var req=new JsHttpRequest();
    req.onreadystatechange=function(){

    if(req.readyState==4) document.getElementById("result[<?= $HTTP_POST_VARS['count']?>]").innerHTML=req.responseText;}
    req.open(null,"kassa_help.php",true);
    req.send({auto:value});}
    </script>
    <!– Создаем форму –>
     
    <!– Теперь пихаем в нее первый select –>

    <select name="auto[0]" onchange="doload(this.value);">
    <option value="no" selected>Выберите номер…</option>
    <?php
    $sql = mysql_query("SELECT * FROM auto order by number_gos");
    while ($auto = mysql_fetch_object($sql)) {
    echo "<option value = \"$auto->auto_ID\">$auto->number_gos</option>";
    }
    ?>
    </select>


    <br><br>
    </td>
    <!– Вставляем тэг с нашим идентификатором, вместо которого у нас будет появляться второй select –>
    <td>
    <div id="result[<?= $HTTP_POST_VARS['count']?>]" ></div>
    </td>
    <td><input type = "text" name = sum_plan[0]></td>
    <td><input type = "text" name = sum_rem[0]></td>
    <td valign="top"><a href="#" onclick="return rmline(0);">удалить</a></td>

    </tr>

    <!– Теперь вставляем кнопку и закрываем форму. –>

    </table>
    </span>

    <input type="hidden" name="count" value="0">
    <script language="JavaScript">

    function addline()

    {

    c=++document.getElementById('count').value; // увеличиваем счётчик строк

    s=document.getElementById('table').innerHTML; // получаем HTML-код таблицы

    s=s.replace(/[\r\n]/g,''); // вырезаем все символы перевода строк

    re=/(.*)(<tr id=.*>)(<\/table>)/gi;

    // это регулярное выражение позволяет выделить последнюю строку таблицы

    s1=s.replace(re,'$2'); // получаем HTML-код последней строки таблицы

    // заменяем все цифры к квадратных скобках

    s2=s1.replace(/\[\d+\]/gi,'['+c+']');

    // на номер новой строки

    s2=s2.replace(/(rmline\()(\d+\))/gi,'$1'+c+')');

    // заменяем аргумент функции rmline на номер новой строки

    s=s.replace(re,'$1$2'+s2+'$3');

    // создаём HTML-код с добавленным кодом новой строки

    document.getElementById('table').innerHTML=s;

    // возвращаем результат на место исходной таблицы

    return false; // чтобы не происходил переход по ссылке

    }

    function rmline(q)

    {

    s=document.getElementById('table').innerHTML;

    s=s.replace(/[\r\n]/g,'');

    re=new RegExp('<tr id="?newline"? nomer="?\\['+q+'.*?<\\/tr>','gi');

    // это регулярное выражение позволяет выделить строку таблицы с заданным номером

    s=s.replace(re,'');

    // заменяем её на пустое место

    document.getElementById('table').innerHTML=s;

    return false;

    }

    </script>



    <input type="submit" value="Отправить">

    </form>[/php]

    второй - "kassa_help.php"
    [php]<?

    include("mysql.inc");


    require("JsHttpRequest.php"); //Подключаем библиотеку
    $JsHttpRequest=new JsHttpRequest("windows-1251"); //Создаем экземпляр класса, указываю рабочую кодировку.

    //Далее все просто. В зависимости от выбранного параметра в первом select`e, заполняем переменную $html необходимым кодом.

    $auto = ($HTTP_POST_VARS['auto']);
    echo $count = ($HTTP_POST_VARS['count']);



    $sql = mysql_query("SELECT distinct driver_id FROM list where `auto_ID` = '$auto'");
    $n= mysql_num_rows($sql);
    if ($n>0){ ?>
    <select name = "driver[<?= $count?>]"><?
    while($d = mysql_fetch_array($sql)) {

    //$driver_id = $d->driver_ID;
    $sqll = mysql_query("SELECT * FROM driver where `driver_id` ='$d[0]' ");
    while ($driver = mysql_fetch_object($sqll)) {

    echo "<option value = \"$driver->driver_ID\">$driver->surname $driver->name $driver->sec_name</option>";

    }
    } ?> </select> <?}
    else echo "Сначала заполните ПЛ!";

    ?>




    1. (59)
  • md5

    Сообщения: 11960 Репутация: N Группа: в ухо

    Spritz 24 ноября 2009 г. 3:11, спустя 23 часа 53 минуты 47 секунд

    блин, ребят, надо переписать этот фак на jquery ((
    срочняк
    все умрут, а я изумруд
  • adw0rd

    Сообщения: 22959 Репутация: N Группа: в ухо

    Spritz 24 ноября 2009 г. 3:12, спустя 1 минуту 9 секунд

    md5, ага, ты ответственный )
    https://smappi.org/ - платформа по созданию API на все случаи жизни
  • md5

    Сообщения: 11960 Репутация: N Группа: в ухо

    Spritz 24 ноября 2009 г. 3:21, спустя 8 минут 15 секунд


    md5, ага, ты ответственный )
    хорошо
    сегодня напишу новый фак
    все умрут, а я изумруд
  • Trej Gun

    Сообщения: 5305 Репутация: N Группа: в ухо

    Spritz 24 ноября 2009 г. 5:21, спустя 1 час 59 минут 59 секунд



    md5, ага, ты ответственный )
    хорошо
    сегодня напишу новый фак
    помогу чем смогу
  • md5

    Сообщения: 11960 Репутация: N Группа: в ухо

    Spritz 24 ноября 2009 г. 5:22, спустя 1 минуту 20 секунд




    md5, ага, ты ответственный )
    хорошо
    сегодня напишу новый фак
    помогу чем смогу
    да лан, там кода на 15 минут и 45 - описалово + оформление :)
    все умрут, а я изумруд
  • Baboot

    Сообщения: 440 Репутация: N Группа: Адекваты

    Spritz 24 ноября 2009 г. 22:45, спустя 17 часов 23 минуты 17 секунд

    churlena, тут почитай : http://www.linkexchanger.su/2009/82.html
  • md5

    Сообщения: 11960 Репутация: N Группа: в ухо

    Spritz 24 ноября 2009 г. 23:15, спустя 29 минут 34 секунды

    я, кстати, написал, в обед доофорляю и выложу
    все умрут, а я изумруд
  • md5

    Сообщения: 11960 Репутация: N Группа: в ухо

    Spritz 25 ноября 2009 г. 15:34, спустя 16 часов 19 минут 3 секунды

    Положим конец JsHTTPRequest
    Спустя 202 сек.
    кстати, в статьях не работае тэг
    все умрут, а я изумруд

Пожалуйста, авторизуйтесь, чтобы написать комментарий!