За последние 24 часа нас посетил 20301 программист и 1707 роботов. Сейчас ищут 1546 программистов ...

javascript fail

Тема в разделе "JavaScript и AJAX", создана пользователем Arti, 22 апр 2015.

  1. Arti

    Arti Новичок

    С нами с:
    22 апр 2015
    Сообщения:
    7
    Симпатии:
    0
    здравствуйте, возможно вы сможете помочь разобраться. Не так давно начал познавать php, но тут уперся в javascript, и собственно поплохело.

    Код (Text):
    1. <script>
    2. var auto;
    3. var gr = document.getElementsByName('checkbox1');
    4. window.onclick = function() {
    5.   for(var i=0; i<gr.length; i++)
    6.     if (gr[i].checked) {
    7.       auto = 'autocomplete2.php';
    8.     } else {
    9.       alert( auto );
    10.     }
    11. }
    12. $(document).ready(function(){
    13.     $('#search_notice').autocomplete( auto , {
    14.       selectFirst: true
    15.    });
    16.    
    17. });
    18. </script>";
    19. ?>
    Поясню задачу, на страничке вводится строка в #search_notice затем передается для обработки на php обработчик (был autocomplete.php но необходимо делать селект из нескольких фалов, для этого создал переменную auto куда собственно и будем кидать имя обработчика). Но к сожалению этот фрагмент не отрабатывает

    Код (Text):
    1. ($('#search_notice').autocomplete( auto , {
    2.       selectFirst: true
    3.    });),
    хотя в переменную обработчик заносится, возможно необходимо экранировать как то переменную, в автокомплите.
    Вид элементов [​IMG] При выборе одного чекбокса автозаполнение должно использовать autocomplete.php при выборе другого - другой. Заранее прошу прощения за возможные глупые ошибки. Если будут советы по иному выполнению задачи с радостью выслушаю
     
  2. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    А что, по-вашему должен делать этот фрагмент? Какую логику вы пытались в нем реализовать?


    Добавлено спустя 2 минуты 23 секунды:
    Далее, вы в курсе, что чекбоксы - это логические элементы, позволяющие делать выбор многого из многих? Если сразу два чекбокса выделены, что делать? Вам, раз на то пошло, нужны radiobutton-ы.

    Добавлено спустя 1 минуту 41 секунду:
    Но сначала ответьте на первый вопрос. Это очень интересно.
     
  3. Arti

    Arti Новичок

    С нами с:
    22 апр 2015
    Сообщения:
    7
    Симпатии:
    0

    Признаюсь положа руку на сердце, фрагмент был использован из примера, целью которого было выявление изменения состояния чекбоксов и его индикация. По моим же соображениям данный фрагмент должен проверять состояние чекбокса и заносить значение в переменную , собственно значение которой мы сможем применить ниже, для формирования запроса к нужному обработчику. Насчет радиобаттон все верно, их было бы использовать целесообразней, но хотелось бы рассмотреть и вариант одновременного использования(несколько выбранных комбенаций), но боюсь для этого нужно переделовать скрипт обработки. п.с. огромное спасибо за адекватный подход

    Добавлено спустя 7 минут 58 секунд:
    если же без лишних слов и следую логике:
    window.onclick = function() { - по клику
    for(var i=0; i<gr.length; i++) - этот фрагмент не понял, но похоже на цикл для выборки всех переменных объектов чекбокс приведенных в переменных gr*
    if (gr.checked) { - если элемент gr* выделен
    auto = 'autocomplete2.php'; -присваиваем переменной авто текст 'autocomplete2.php'
    } else {
    alert( auto ); - заглушка для проверки состояния унчекд
    }
    }
     
  4. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    А теперь я опишу, что в этом коде написано:
    Код (PHP):
    1. window.onclick = function() { //(!!!)Всему вьюпорту(!!!) на событие "клик мышкой" вешаем обработчик
    2.   for(var i=0; i<gr.length; i++) //В котором идем по всем элементам с name, равным сheckbox1, которые не обязательно вообще являются чекбоксами, так на всякий
    3.     if (gr[i].checked) { //если у элемента есть аттрибут checked и он равен true, то
    4.       auto = 'autocomplete2.php'; //В переменную auto заносим autocomplete2.php И ТОЛЬКО ЕГО. Какой бы чекбокс не был отмечен, в переменную auto попадет строго autocomplete2.php, и никак иначе.
    5.     } else { //В противном же случае
    6.       alert( auto ); //Выводим на экран содержимое auto, которое вообще может и не существовать.
    7.     }// И так для каждой итерации
    8. }
    А теперь сравните с тем, как вы себе это представляли, и подумайте, действительно ли проблема в том, что:
     
  5. Arti

    Arti Новичок

    С нами с:
    22 апр 2015
    Сообщения:
    7
    Симпатии:
    0
    Заранее прошу прощения за потенциальную глупость, но в коде есть масса недоработок, но мене собственно не дает покоя момент
    Код (Text):
    1. ($('#search_notice').autocomplete( auto , {
    2.       selectFirst: true
    3.    });),
    так как в alert( auto ) мы получаем значения переменной, а в ($('#search_notice').autocomplete( auto , {
    selectFirst: true
    });),
    данное значение не не применяется, ну либо не хватает ума проверить этот момент. На самом деле все это можно назвать попыткой уйти от теории к практике, что выглядит весьма удручающе, так как фундамента нет.
     
  6. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    А теперь код формы в студию.

    Добавлено спустя 49 секунд:
    Что мешает сначала попытаться выучить язык, а потом пользоваться?
     
  7. Arti

    Arti Новичок

    С нами с:
    22 апр 2015
    Сообщения:
    7
    Симпатии:
    0
    Дело в том что основная масса реализаций уже готова, на php, это так сказать стартовая оплошность так как с помощью js можно было все сделать "красивее" и "легче", php был "понят" на примерах, с js видимо будет сложнее.
    Если под формой подразумевается обработчик события то вот:
    Код (Text):
    1. <?php
    2.     include 'conf.php';
    3.     $q=$_GET['q'];
    4.     $my_data=mysql_real_escape_string($q);
    5.     $sql = mysql_query("SELECT drug_name FROM drugs WHERE drug_name LIKE '%$my_data%' ORDER BY drug_name");
    6.        
    7.     if($sql)
    8.     {
    9.         while($row=mysql_fetch_array($sql))
    10.         {
    11.             echo $row['drug_name']."\n";
    12.         }
    13.     }
    14. ?>
    п.с. похоже я свою ошибку понял, проверка чекбоксов на изменение состояния проходит циклически, видимо до передачи в обработчик попросту дело не доходит. Огромное спасибо за терпение, и очень прошу посоветовать литературу по js, по доступнее.
     
  8. Arti

    Arti Новичок

    С нами с:
    22 апр 2015
    Сообщения:
    7
    Симпатии:
    0
    Код (Text):
    1. <script>
    2. function check(){
    3.   var rarr=document.getElementsByName('radio_search');
    4.   var auto;
    5.   if(rarr[0].checked){
    6.     auto = 'autocomplete.php';
    7.   }
    8.   else
    9.   {
    10.        auto = 'autocomplete2.php';
    11.   }
    12.  
    13. $(document).ready(function(){
    14.      $('#search_notice').autocomplete( auto , {
    15.         selectFirst: true
    16.     });
    17.    
    18. });
    19.  }
    20. </script>
    Решил вопрос обратившись к радиобатон-ам
     
  9. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Под формой подразумевается Html-форма. Броу, у тебя даже с базовой терминологией, даже в рамках HTML проблемы. Рановато ты за кодинг взялся, и тем более за JS. И да, JS по примерам ты не поймешь, это не самый очевидный язык. Плюс, чтобы его понять, нужно знать, что такое замыкания, что такое контекст выполнения и еще кучу страшных слов.
     
  10. Arti

    Arti Новичок

    С нами с:
    22 апр 2015
    Сообщения:
    7
    Симпатии:
    0
    Насчет страшных слов все верно, действительно страшно. Что поделать, попросили выполнить "кривокосо" задачу, бюджета нет, предложено было обратится к профессионалам области, но нет. Так что хозяин - барин, как можем так и лепим. Если можно посоветуйте литературу по JS

    Код формы
    Код (Text):
    1. echo "<form action=\"\" method=\"post\" name=\"amb_card\">\n";
    2.     echo "<table class=\"table_main\" border=\"2\" cellpadding=\"2\" cellspacing=\"2\">\n";
    3.     echo "</tr><tr>\n";
    4.     echo "<td class=\"td_main\" bgcolor=\"white\" colspan=\"2\" align=\"left\">{$langdata['inform_massege']}<red>$mess</red></td></td>\n";
    5.     echo "</tr><tr>\n";
    6.     echo "<td class=\"td_main\"> {$langdata['patient_id_label']} <input class=\"input_search\" type=\"text\" disabled=\"disabled\" value=\"".$patientdata['patient_fam']."    ".$patientdata['patient_name']."    ".$patientdata['patient_lname']."    ".$patientdata['patient_birth_date']."\" name=\"patient_id\" /></td>";
    7.     echo "</tr><tr>\n";
    8.     echo "<td class=\"td_main\"> <input type=\"radio\" name=\"radio_search\" value=\"l\" onchange=\"check()\">Диагнозы <input type=\"radio\" name=\"radio_search\" value=\"2\" onchange=\"check()\">Анамнезы    {$langdata['patient_id_label']} <input class=\"input_search\" type=\"text\" id=\"search_notice\" name=\"search_notice\" /></td>";
    9.     echo "</tr><tr>\n";
    10.     echo "<td align=\"center\"> <input type=\"submit\" onclick =\"document.getElementById('notice_enter').value = document.getElementById('notice_enter').value + ' ' +document.getElementById('search_notice').value; return !1;\" name=\"add_notice_button\" class=\"buttons\" value=\"{$langdata['add_notice_button']}\" /> <input id=\"my-div\" align=\"middle\"type=\"submit\" onclick =\"return confirm('{$langdata['save_notice_confirm']}')\" name=\"save_notice_button\" class=\"buttons\" value=\"{$langdata['save_notice_button']}\" /> <input id=\"my-div\" align=\"middle\"type=\"submit\" onclick =\"return confirm('{$langdata['save_templ_confirm']}')\" name=\"save_templ_button\" class=\"buttons\" value=\"{$langdata['save_templ_button']}\" /></td>";
    11.     echo "</tr><tr>\n";
    12.     echo "<td class=\"td_main\"><textarea class=\"textarea_main\" align=\"center\" id=\"notice_enter\" name=\"notice_enter\" value=\"\">{$templ['templ_text']}</textarea></td>";
    13.     echo "</tr><tr>\n";
    14.     echo "</tr></table></form>\n\n";
     
  11. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Святые макароны... Это не код, это каша. Автор, все очень плохо. Просто сказочная каша.
    https://learn.javascript.ru/tutorial
     
  12. Arti

    Arti Новичок

    С нами с:
    22 апр 2015
    Сообщения:
    7
    Симпатии:
    0