Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 12.10.2016, 13:15
Аспирант
Отправить личное сообщение для snovapavel Посмотреть профиль Найти все сообщения от snovapavel
 
Регистрация: 08.03.2015
Сообщений: 78

Как выполнить код при появлении элемента?
Добрый день!

Написал функцию, которая автоматически чистит атрибут title у изображений в Админ-панели. Но беда в том, что окно загрузки появляется через Ajax и естественно функция не срабатывает.

Как отследить, что элемент на странице появился и только тогда выполнить скрипт?

Вот он сам:

$( 'head' ).append( '<script>jQuery( document ).ready( function( $ ) { $(\'.media-sidebar label[data-setting="title"] input[type="text"]\').val(\'\'); } );</script>' );
Ответить с цитированием
  #2 (permalink)  
Старый 12.10.2016, 13:56
Аватар для Coriolan161
Профессор
Отправить личное сообщение для Coriolan161 Посмотреть профиль Найти все сообщения от Coriolan161
 
Регистрация: 21.11.2015
Сообщений: 440

snovapavel,
У тебя в аяксе должен быть успешный колбек в него и запихай свой хеад аппенд
Ответить с цитированием
  #3 (permalink)  
Старый 12.10.2016, 14:15
Аспирант
Отправить личное сообщение для snovapavel Посмотреть профиль Найти все сообщения от snovapavel
 
Регистрация: 08.03.2015
Сообщений: 78

Не понимаю о чём речь... Нельзя просто постоянно отслеживать появление элемента на странице?
Ответить с цитированием
  #4 (permalink)  
Старый 12.10.2016, 14:19
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,491

Если страничка твоя - то изменения надо вносить сразу в код отрисовки нужного окошка, а не через зад. Если это юзерскрипт, или хак какой - тогда так и говори.
__________________
29375, 35
Ответить с цитированием
  #5 (permalink)  
Старый 12.10.2016, 14:26
Аспирант
Отправить личное сообщение для snovapavel Посмотреть профиль Найти все сообщения от snovapavel
 
Регистрация: 08.03.2015
Сообщений: 78

Юзерскрипт, конечно.


Вот мой скрипт:

// ==UserScript==
// @name         Processing site.ru
// @version      0.1
// @author       Ivan
// @match        [url]http://site.ru/*[/url]
// @require      [url]http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js[/url]
// @run-at       document-start
// ==/UserScript==

$(document).ready(function() {
  var $ = window.jQuery;

  $( 'head' ).append( '<script>jQuery( document ).ready( function( $ ) { $(\'.media-sidebar label[data-setting="title"] input[type="text"]\').val(\'\'); } );</script>' );

});
Ответить с цитированием
  #6 (permalink)  
Старый 12.10.2016, 19:53
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,491

Я у себя использую подобный скрипт для вмешательства в чужой код(пример конкретно с ajax):
function waitFor(obj, ...props){
  var callback = props.pop();

  function isPrimitive(obj){
    return !["function", "object"].includes(typeof obj);
  }
  
  function next(obj, prop){
    if(props.length) return defineSetter(obj[prop], props.shift());
    callback(obj, prop);
  }

  function defineSetter(obj, prop){
    if(isPrimitive(obj)) 
      return console.error(`Object needed. Can not wait for property "${prop}" in primitive "${obj}".`);
    
    if(prop in obj) return next(obj, prop);
    
    Object.defineProperty(obj, prop, {
      enumerable: false,
      configurable: true,
      set: function(value) {
        delete obj[prop];
        obj[prop] = value;
        next(obj, prop);
      }
    })    
  }
  
  if(isPrimitive(obj)) 
    return console.error(`Object needed. Can not wait for properties in primitive "${obj}".`);
  if(!props.length) 
    return console.error('No properties to wait was specified.');
  
  defineSetter(obj, props.shift());
}

function decorate(func, callback){ 
  var out = function(){
    return func.apply(this, callback.apply(this, arguments) || arguments)
  };
  out.prototype = Object.create(func.prototype);
  return out;
}

function replace(text){
    return [
        text.replace(/foo/g, 'bar') //заменяем в полученном ajax ответе foo на bar
    ];
}

waitFor(unsafeWindow, '$', 'ajax', function($, ajax){ //ждём пока подгрузится $.ajax
  $.ajax = decorate($.ajax, function(options){ //подменяем $.ajax
    if(options && options.url ) console.log(url); //логируем url запроса
    if(options && options.success && options.url && options.url.startsWith('/some/')) 
      options.success = decorate(options.success, replace); //подменяем коллбэк для запросов на url начинающихся с "/some/"
  });
})
Писано на коленке, так что можно наверное красивей и лучше, но "работает и не трогаю".)
__________________
29375, 35

Последний раз редактировалось Aetae, 12.10.2016 в 19:56.
Ответить с цитированием
  #7 (permalink)  
Старый 12.10.2016, 20:38
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от snovapavel
автоматически чистит атрибут title у изображений
И каким образом это

$('.media-sidebar label[data-setting="title"] input[type="text"]').val('')


может очищать автоматически атрибут title изображений?
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как правильно организовать код? karssen Общие вопросы Javascript 8 13.12.2015 21:47
Как выполнить drag&drop элемента с низким z-index? Dimatokis Элементы интерфейса 3 31.08.2015 11:59
Как вы относитесь к наркоманам? Maxmaxmaximus7 Оффтопик 7 05.02.2014 13:29
Скрытие элемента при клике вне этого элемента astrogator Общие вопросы Javascript 4 11.05.2013 21:24
Как сделать, чтобы при наведении на кнопку справа от нее появлялись текстовые ссылки? Tass Общие вопросы Javascript 7 17.02.2011 09:06