Как я могу установить заголовок всплывающей подсказки cluetop из обратного вызова ajax при sticky: true?

#jquery #ajax #title #cluetip

#jquery ( jquery ) #аякс #Название #cluetip

Вопрос:

Я использую плагин cluetip, который является отличным. Я заполняю плагин с помощью Ajax, но нигде (в документации или примерах) не могу указать, как установить заголовок из обратного вызова ajax.

Поддерживается ли обновление заголовка из ajax в cluetip?

ПРИМЕЧАНИЕ ОБ ОБНОВЛЕНИИ:

Таким образом, приведенные ниже предложения работают в том смысле, что они могут создать заголовок, но в этом случае кнопка закрытия не отображается в заголовке. Смотрите Изображение ниже.

введите описание изображения здесь

Комментарии:

1. Насколько я вижу , на демонстрационной странице clueTip есть множество примеров для этого (начиная с примера 2. и далее)

2. @Tomm — нет примера с ajax и заголовком.

3. Посмотрите на это сообщение на форуме: forum.jquery.com/topic /…

4. @Tomm — я пробовал этот пост, но, похоже, он не работает для меня

5. @leora — вы пробовали мой ответ ниже? работает ли это для вас?

Ответ №1:

На самом деле, это довольно просто, если смотреть под простым углом.

Первое, на что следует обратить внимание, это то, что все подсказки в документе используют только один макет разметки, чтобы показать все подсказки. Каждый раз, когда запускается новый cluetip, он только обновляет свой макет разметки и показывает его.

Давайте посмотрим пример того, как обойти то, что вы пытаетесь


Для этого я использовал демонстрацию. Таким образом, разметка:

Примечание: я использую два cluetips для имитации случая с несколькими cluetips

 <a class="title" title="hello" href="http://plugins.learningjquery.com/cluetip/demo/ajax3.html" rel="http://plugins.learningjquery.com/cluetip/demo/ajax3.html">This example</a>

<a class="basic" href="http://plugins.learningjquery.com/cluetip/demo/ajax.html" rel="http://plugins.learningjquery.com/cluetip/demo/ajax.html">Basic</a>
 

Давайте внесем небольшое изменение в стили, чтобы оно правильно выровнялось

 .cluetip-close { float: right; margin-top: -40px; }
 

Теперь наш скрипт для обеих подсказок.

   var title;
  $('a.title').cluetip({
      closePosition: 'top',
      sticky: true,
      closeText: '<img src="http://plugins.learningjquery.com/cluetip/demo/cross.png" alt="close" width="16" height="16" />Close',            
      ajaxCache: false,
      ajaxSettings:  {
        success: function(data) {
            title = "Your new Title";            
            $(this).attr("title", title); //just set the title for consistency
        }
      },
      onShow : function(ct,c) {
          $(".cluetip-title").text(title); //update the title class with the title
      }
  });

  $('a.basic').cluetip(); //While definning another tip, it is NOT affected by previous one
 

Это СДЕЛАНО

Хотя скрипка может его не показывать. Я протестировал его, и он работает.

Ответ №2:

Cluetip кэширует заголовок при его первом создании. В результате вам придется изменить его в опции OnShow. Попытка изменить его на этапе ajaxProcess приведет к перезаписи ваших изменений.

Однако вы можете использовать параметр настройки ajax, чтобы получить нужный заголовок и сохранить этот заголовок в переменной.

Имейте в виду, что cluetip кэширует результат ajax по умолчанию. Вы можете установить ajaxCache: false, чтобы изменить это.

Вот несколько примеров кода

 var title;
$('a.clue').cluetip({
    ajaxSettings:  {
        success: function(data) {
            // GET Title here
            title = 'new title';
        }
    },
    ajaxCache: false,
    onShow : function(ct,c) {
         $("#cluetip-title").text(title);
    }
});
 

Вы также можете использовать параметр ajaxProcess, но вам нужно убедиться, что вы вызвали значение по умолчанию для этой опции, чтобы убедиться, что она удаляет теги script и style .

Комментарии:

1. у меня есть несколько всплывающих подсказок на странице, поэтому я не думаю, что $(«#cluetip-title»).text(title); будет работать

2. я добавил скриншот к вопросу, чтобы подчеркнуть то, что я вижу

3. У вас случайно нет jsFiddle или example? Я удалил код, с которым я тестировал это много лет назад. Из того, что я вижу, на странице есть только одна подсказка-подсказка. Однако, глядя на демонстрацию, я думаю, что заголовок подсказки — это заголовок h3.cluetip, а не идентификатор.

Ответ №3:

Вы можете сделать что-то вроде этого:

 $('a.basic').cluetip({
    ajaxProcess: function(data) {
        // Suppose the data come with the following structure:
        data = { title: "Another title", body: "Blah blah blah blah" };

        $(this).attr("title", data.title);
        return data.body;
    },
    onShow: function(ct, c) {
        ct.find(".cluetip-title").text(
            $(this).attr("title")
        );
    }
});
 

Посмотрите это в действии здесь: http://jsfiddle.net/A9EQ5/20 /

Комментарии:

1. проблема здесь в том, что если у вас есть sticky:true, кнопка закрытия не отображается в заголовке, а вместо этого отображается на строке под ним. Есть ли какое-либо обходное решение для этого??

2.я добавил скриншот к вопросу, чтобы подчеркнуть то, что я вижу

3. Я думаю, что проблема с кнопкой закрытия не имеет отношения к вашему первоначальному вопросу. Я не вижу, как установка заголовка так, как я предлагаю, может испортить кнопку закрытия.

Ответ №4:

   $('a.basic').cluetip({
      sticky: true,
      closePosition: 'title',
      ajaxCache: false,
      ajaxProcess: function(data) {
        data = {title: "AjaxTitleGoesHere", body:"AjaxBodyGoesHere"};
        $(this).attr("title", data.title);
        return data.body;
      },
      onShow: function(ct, c) {
        ct.find(".cluetip-title").append(
            $(this).attr("title")
        );
      }
  });
 

Ответ №5:

Вы всегда можете скрыть заголовок и смоделировать его с помощью ответа ajax.