2016-03-21 3 views
-2

У меня есть следующий код:Установить текст всплывающей подсказки с JQuery

var text = ""; 
$.ajax({ 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    type: "POST", 
    url: DataReview.BASE + "/Encryption/FetchLatestEditBy", 
    data: JSON.stringify({ 
     "ExtendedReport_id": dataRow["ExtendedReport_id"], 
     "Report_id": dataRow["Report_id"] 
    }), 
    success: function (data) { 
     text = data.ResultData; 
    }, 
    error: function (data) { 
     console.log(data); 
    } 
}); 

setTimeout(function() { 
    console.log(text); //This displays the value 
    $(this).attr('data-toggle', 'tooltip'); 
    $(this).attr('title', text); 
}, 1000); 

Как вы можете видеть, Im пытается установить подсказку-текст в SetTimeout-функции. Но он не появится. Когда я заменяю text -переменный с некоторым фиктивным текстом, он работает. Но значение переменной не работает.

Кто может мне помочь?

+0

Можете ли вы показать нам рабочий фрагмент? –

+0

@PraveenKumar: Рабочий фрагмент чего? – Bryan

+0

Он означает живую версию или скрипку, где вы можете показать проблему. – Jer

ответ

0

Когда вы используете таймаут, this будет в области окна, а не с элементом. Таким образом, вы фактически добавляете атрибуты в окно.

Во-вторых, нет гарантии, что вызов ajax будет выполнен, или вы можете ждать слишком долго после вызова Ajax, используя таймаут. Вы должны установить атрибуты в обратном вызове успеха вызова Ajax.

В-третьих, вам, вероятно, нужно вручную вызвать подсказку, чтобы получить обновленные данные.

var elem = $(this); 
$.ajax({ 
    /* your code here, removed to simplify answer*/ 
    success: function (data) { 
     elem.attr('data-toggle', 'tooltip'); 
     elem.attr('title', text); 
     elem.tooltip().tooltip("show"); // might need to change this line based on actual library 
    } 
}); 
+0

Спасибо за ваш ответ! :) – Bryan

0

Я предполагаю, что ваш успех Аякса занимает больше времени и, таким образом, функция SetTimeout вызывается первым перед значением переменной «Текст» устанавливается в функции успеха. Попробуйте вызвать функцию в функции onsuccess ajax.

var text = ""; 
$.ajax({ 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    type: "POST", 
    url: DataReview.BASE + "/Encryption/FetchLatestEditBy", 
    data: JSON.stringify({ 
     "ExtendedReport_id": dataRow["ExtendedReport_id"], 
     "Report_id": dataRow["Report_id"] 
    }), 
    success: function (data) { 
     text = data.ResultData; 
     settooltiptext(); 
    }, 
    error: function (data) { 
     console.log(data); 
    } 
}); 

function settooltiptext() 
{ 
    console.log(text); //This displays the value 
    $(this).attr('data-toggle', 'tooltip'); 
    $(this).attr('title', text); 
} 
+0

Хотя вы совершенно правы в отношении времени, когда комментарий «это отображает значение» означает, что он работает в этих особых обстоятельствах. В противном случае 'console.log' выводит пустую строку. Я думаю, что epascarello ближе к проблеме, указывающей на '$ (this)' может быть не то, что OP ожидает. – yoshi

+1

имеет смысл, я полностью пропустил раздел console.log. Спасибо, что указали это. – koolhuman