За последние 24 часа нас посетили 45127 программистов и 9888 роботов. Сейчас ищут 1894 программиста ...

Помогите решить проблему!

Тема в разделе "PHP для новичков", создана пользователем rdPavel, 1 авг 2017.

  1. rdPavel

    rdPavel Новичок

    С нами с:
    1 авг 2017
    Сообщения:
    6
    Симпатии:
    0
    Доброго дня спецы!
    Два дня не могу решить проблему.

    На странице, с помощью скрытого инпута ->

    PHP:
    1. <input type="hidden" name="ID" value="<?php echo esc_attr( $listing->ID ); ?>" />
    Создаются поля, выпадающие списки, произвольные поля и так далее
    Одно из них ->
    PHP:
    1. <select name="cp_state" id="cp_state" class="dropdownlist required">
    Как мне программно присвоить этому полю обработчик onchange="CityList(this)
    Или может быть через name="cp_state" id="cp_state" ?

    Пробовал присвоить здесь в файле custom-forms.php
    $field_class = ( $result->field_req ) ? 'dropdownlist required' : 'dropdownlist';
    $args = array( 'name' => $result->field_name, 'id' => $result->field_name, 'class' => $field_class, 'onchange' => 'CityList(this)' );

    Но тогда этот обработчик во всех dropdownlist, а мне нужен только name="cp_state" id="cp_state"
    Как еще можно сделать?
     
    #1 rdPavel, 1 авг 2017
    Последнее редактирование модератором: 1 авг 2017
  2. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.874
    Симпатии:
    756
    Адрес:
    Татарстан
    прописать в подключаемом js что-то типа
    Код (Javascript):
    1. $("#cp_name").on("change", function () {
    2.   CityList$($(this).val);
    3. })
     
  3. rdPavel

    rdPavel Новичок

    С нами с:
    1 авг 2017
    Сообщения:
    6
    Симпатии:
    0
    @ADSoft хорошо попробую.
     
  4. rdPavel

    rdPavel Новичок

    С нами с:
    1 авг 2017
    Сообщения:
    6
    Симпатии:
    0
    @ADSoft
    Что-то не получается.
    Вообще есть ли такая функция к полю name="cp_state" или по id="cp_state" привязать или присвоить onchange?
     
  5. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.874
    Симпатии:
    756
    Адрес:
    Татарстан
    ну смотреть надо ошибки, опечатки... поправить - главное направление дано
    Код (Javascript):
    1. $("#cp_name").on("change", function () {
    2.   CityList($(this).val());
    3. })
    пишу с коленки на телефоне... вот и неудобно
     
  6. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    @ADSoft, может товарищ не использует jQuery?
     
  7. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.874
    Симпатии:
    756
    Адрес:
    Татарстан
    все может быть )))) я не телепат
    может он вообще это в php код сует
     
  8. rdPavel

    rdPavel Новичок

    С нами с:
    1 авг 2017
    Сообщения:
    6
    Симпатии:
    0
    Обработчик который нужно привязать к
    PHP:
    1. <select name="cp_state" id="cp_state"class="dropdownlist required" onchange="CityList(this)">
    chained.js

    PHP:
    1. var ajax = new Array();
    2.  
    3. function CityList(sel)
    4. {
    5.     var countryCode = sel.options[sel.selectedIndex].value;
    6.     document.getElementById('cp_region').options.length = 0;    // Empty city select box
    7.     if(countryCode.length>0){
    8.         var index = ajax.length;
    9.         ajax[index] = new sack();
    10.      
    11.         ajax[index].requestFile = 'http:/*******getcities.php?countryCode='+countryCode;    // Specifying which file to get
    12.         ajax[index].onCompletion = function(){ createCities(index) };    // Specify function that will be executed after file has been found
    13.         ajax[index].runAJAX();        // Execute AJAX function
    14.     }
    15. }
    16.  
    17. function createCities(index)
    18. {
    19.     var obj = document.getElementById('cp_region');
    20.     eval(ajax[index].response);    // Executing the response from Ajax as Javascript code
    21. }

    в getcities.php база районов и сел

    cp_region - вывод сел исходя из района.
     
    #8 rdPavel, 1 авг 2017
    Последнее редактирование модератором: 1 авг 2017
  9. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.874
    Симпатии:
    756
    Адрес:
    Татарстан
    ну зачем 3 раз повторять одно и тоже...? что тебе надо - ясно ....
    способ я предложил, он юзает библиотеку JQuery, которую ты не подключаешь судя по тому какой код у тебя в запросах
    советовал бы кратенько изучить и применить - кода в разы меньше будет, понятность - увеличится
     
  10. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.213
    Симпатии:
    1.711
    Адрес:
    Молдова, г.Кишинёв
  11. rdPavel

    rdPavel Новичок

    С нами с:
    1 авг 2017
    Сообщения:
    6
    Симпатии:
    0
    @denis01
    Добрый день!
    Можете подсказать из-за чего могут конфликтовать эти два кода.
    Один отключу второй работает и на оборот.
    Эти оба на одной форме.

    Обработчик cp_state.js
    01 var ajax = new Array();
    02
    03 window.onload=function(){
    04 window.document.getElementById('cp_state').onchange=function(e){
    05 getCityList(e.target);
    06 };
    07 };
    08 if(window.document.readyState=='complete')
    09 window.dispatchEvent(new Event('load'));
    10
    11
    12 function getCityList(sel)
    13 {
    14 var countryCode = sel.options[sel.selectedIndex].value;
    15 document.getElementById('cp_region').options.length = 0;
    16 if(countryCode.length>0){
    17 var index = ajax.length;
    18 ajax[index] = new sack();
    19
    20 ajax[index].requestFile = 'http://***/sel/baza/cp_state.php?countryCode='+countryCode;
    21 ajax[index].onCompletion = function(){ createCities(index) };
    22 ajax[index].runAJAX();
    23 }
    24 }
    25
    26 function createCities(index)
    27 {
    28 var obj = document.getElementById('cp_region');
    29 eval(ajax[index].response);
    30 }


    Обработчик cp_avto.js
    01 var ajax = new Array();
    02
    03 window.onload=function(){
    04 window.document.getElementById('cp_id_387').onchange=function(e){
    05 getAvtoList(e.target);
    06 };
    07 };
    08 if(window.document.readyState=='complete')
    09 window.dispatchEvent(new Event('load'));
    10
    11
    12 function getAvtoList(sel)
    13 {
    14 var countryCode2 = sel.options[sel.selectedIndex].value;
    15 document.getElementById('cp_id_928').options.length = 0;
    16 if(countryCode2.length>0){
    17 var index = ajax.length;
    18 ajax[index] = new sack();
    19
    20 ajax[index].requestFile = 'http://***/sel/baza/cp_avto.php?countryCode2='+countryCode2;
    21 ajax[index].onCompletion = function(){ createCities2(index) };
    22 ajax[index].runAJAX();
    23 }
    24 }
    25
    26 function createCities2(index)
    27 {
    28 var obj = document.getElementById('cp_id_928');
    29 eval(ajax[index].response);
    30 }


    База, у каждого своя, может её в общую согнать?
     
  12. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.213
    Симпатии:
    1.711
    Адрес:
    Молдова, г.Кишинёв
    @rdPavel сложно сказать, может кто-то сходу подскажет, если нет, то почитай что такое отладка кода, ты так сможешь сам найти проблему.
    Лучше оформляй код, чтобы его как минимум легко было читать и копировать для запуска. Твой скопировать очень сложно.
    Ещё можешь дать ссылку на страницу где этот код не работает, там будет проще посмотреть в консоль браузера и почитать ошибки если они есть. Программа сама пытается подсказать в чём проблема. Прочитай про отладку и инструменты разработчика в google chrome это поможет
     
  13. rdPavel

    rdPavel Новичок

    С нами с:
    1 авг 2017
    Сообщения:
    6
    Симпатии:
    0
    @denis01
    Добрый день!
    Подскажите пожалуйста...

    function CopySelect() {
    var value = document.getElementById('cp_id_387').value;
    var elements = document.getElementsByName('post_title');
    for(var i in elements)
    elements.value = value; }


    Код копирует данные Select "cp_id_387" в Input "post_title"

    Дело в том что есть еще один Select "cp_id_928" как можно реализовать последовательно копирования

    Т.е. в Input "post_title" копируется "cp_id_387" через пробел "cp_id_928"

    По сути картинка такая:
    Марка авто: Тойота
    Модель авто: Найс

    Input "post_title" = Тойота Найс

    Вообще возможно ли это реализовать?
     
  14. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.213
    Симпатии:
    1.711
    Адрес:
    Молдова, г.Кишинёв
    id у тегов должен быть уникальный, если нет, то выпутывайся сам, или просто можешь задавать нескольким тегам одинаковый class чтобы находить все такие класс и перебирать в массиве

    оформление кода https://php.ru/forum/threads/tipichnyj-dialog-s-novichkom.59596/#post-527225