На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! ПРАВИЛА РАЗДЕЛА
Прежде чем задать вопрос, зайдите в раздел FAQ, возможно там уже есть ответ на него.
Если вы хотите вставить код в сообщение, то пожалуйста выделяйте его тегом [code=dfp] ... [/сode].
Для этого используйте кнопку [code=dfp] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Delphi for PHP.
Модераторы: ViktorXP, vicis
  
> Проблема с jquery
    Добрый день, подскажите по следующей проблеме:
    есть edit есть button
    на кнопку вешаем событие onclick по которому меняем содержимое edit
    $("#testedit").attr("value","22222222");
    содержимое меняется, но только 1 раз. Что за глюк ?

    И вообще, как можно отлаживать скрипты? Ни в редакторе, ни в браузере (фаербаг для хрома) ошибки жаваскрипта почему-то не отображаются ((
      1) Удаляешь файребаг для хрома
      2) Нажимаешь f12 (или Ctrl+Shift+I) и используешь отладчик вебкита

      Объясню почему: Это примерно как скачать хром тот же и поставить на него плагин, который превращает его в ИЕ6 - во-первых костыль, во-вторых настолько же бессмысленно. Отладчик вебкита на порядок превосходит файрбаг-плагин в плане функциональности ;)

      Т.е. из этого следует что:
      1) Либо файрбаг глючит (т.к. костыль)
      2) Либо не проставил в нём фильтр "отображать ошибки JS"
      3) Либо ошибок просто нет.

      Если считаешь, что ошибки всё же есть - предлагаю для начала поставить точку останова на изменение атрибута нужного элемента (правой кнопкой в Elements по нужному элементу - id="testedit"). Затем смотреть, срабатывает ли эта точка останова.
        Zafod Biblebox
        всё, с отладкой разобрался, родной отладчик ошибки видит, спасибо.
        А вот с событием по прежнему засада. Первый раз оно срабытывает, содержимое едита меняется, но если в нём после этого дописать или изменить что-то, то больше ничего не меняется
          Каждый DOM элемент передаётся по ссылке. Возможно после каких-либо манипуляций - ссылка исчезает (т.е. операции над элементом уходят в пустоту). Т.е. мы имеем совершенно другой DOM элемент. Предлагаю после манипуляций открыть консоль и набрать:
          ExpandedWrap disabled
            document.getElementById('testedit');
            // или можно так
            $('#testedit')[0];


          После этого должен вернуться DOM элемент (он отображается как тег в консольке). При наведении не него в консольке, если ссылка указывает верно - должен подсветиться соответствующий элемент в панельке Elements.

          Что бы отобразить одновременно консоль и список тегов - надо перейти на вкладку "Elements" и жмякнуть по иконке (справа-сверху) ">E" (угловая стрелка с тремя горизонтальными линиями).
          Сообщение отредактировано: Zafod Biblebox -
            Zafod Biblebox
            Сделал всё как вы сказли, ссылка указана верно, элемент подсвечивается, да и не могло быть по-другому.
            Более того, заметил следующее:
            Если до того как нажать кнопку с событием в эдит что-то написать, то событие вообще не выполняется. Если ничего не писать в эдит, а сразу нажать кнопку, всё как выше - меняется value 1 раз, дальше если что-то менять ничего не происходит. Попробуйте пожалуйста сделать этот простой пример у себя. Тут либо глобальный глюк, либо у меня уже что-то не так у меня :wall:
            Исходные данные - html5builder, серверный проект, пустой эдит, кнопка button тип normal и событие javascript на кнопку онклик $("#testedit").attr("value","22222222222222222");
            при этом меняйте вручную содержимое эдита и смотрите будет работать после этого событие onclick или нет ...
              у меня нет билдера =) но он будет меняться. Пока я не знаю в чём может быть проблема
                Если я напишу ручками аналогичный код на чистом html + javascript + jquery он тоже будет работать как надо, а тут шляпа какая-то. Ладно бы вообще не срабатывало событие, но ведь срабатывает ОДИН раз, и то если инпут до этого не трогать. После внесения какиих-либо значений в инпут $("#testedit").attr("value","22222222222222222"); уже не срабатывает
                  Ну проблема может быть где угодно, т.к. чистый код работает: http://jsfiddle.net/GZMnW/ Может JQuery старый у вас?
                    Разобрался с вопросом. Вот здесь похожая ситуация была
                    https://toster.ru/q/35177

                    оказалось вот что

                    Attributes vs. Properties
                    The difference between attributes and properties can be important in specific situations. Before jQuery 1.6, the .attr() method sometimes took property values into account when retrieving some attributes, which could cause inconsistent behavior. As of jQuery 1.6, the .prop() method provides a way to explicitly retrieve property values, while .attr() retrieves attributes.


                    В ваших примерах с attr кстати такая же беда как и у меня была. Значение только 1 раз меняется. При использовании prop вместо attr всё работает как надо.

                    Добавлено
                    А на старых проектах стоял старый jquery и там всё работало нормально с attr, поэтому у меня чуть мозги и не закипели. Надо лучше следить за обновлениями )))
                      Только что перепроверил свой же пример. А ведь действительно меняется только один раз. Вот я слепой :lol:

                      Добавлено
                      ой, опечатался в рейтинге, надеюсь простишь :D Действительно интересная информация, спасибо
                      0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                      0 пользователей:


                      Рейтинг@Mail.ru
                      [ Script execution time: 0,0283 ]   [ 16 queries used ]   [ Generated: 28.03.24, 10:39 GMT ]