Я пытаюсь построить в Facebook как предварительный просмотр общей ссылки. Для тех, кто визуально наклонным, что-то вроде этого:Динамически предотвратить onKeyUp функцию
Все работает нормально, но в течение нескольких небольших вещей. Предварительный просмотр доли ссылки запускается при помощи функции keyup в соответствующем текстовом поле. Что-то вроде этого:
$('#txtPublish').keyup(function(e){
if ($(this).val() != '' && $(this).parent().find('.share-with').hasClass('active')) {
detectHyperlink(e,this);
}
else {
//do whatever
}
});
И соответствующее detectHyperlink начинается так:
function detectHyperlink(e,textarea)
{
if((e.which == 13 || e.which == 32 || e.which == 17) && ($(textarea).val().trim() != "")){
var hyperlink_post = $('#txtPublish').val(); // make dynamic
if(hyperlink_post != null) {
hyperlink_post = " " + hyperlink_post;
var urlRegex = /(https?\:\/\/|\s)[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})(\/+[a-z0-9_.\:\;-]*)*(\?[\&\%\|\+a-z0-9_=,\.\:\;-]*)?([\&\%\|\+&a-z0-9_=,\:\;\.-]*)([\!\#\/\&\%\|\+a-z0-9_=,\:\;\.-]*)}*/i;
if(urlRegex.test(hyperlink_post)){
// SImple DOM Manipulation
$.ajax({
type: "post",
url: '/controller/crawlHyperlink',
data: {message: hyperlink_post},
cache: false,
success: function(data) {
// данные в формате JSON Offcourse для тех, кто заинтересован в этих вещах.
Это прекрасно работает, но проблема заключается в следующем: метод detectHyperlink продолжает вызываться только один раз. То есть, как только Textarea обнаружит гиперссылку и поделится информацией, она все равно продолжает цикл и делает ajax-вызовы на сервер. Поэтому, когда я нажимаю кнопку «Опубликовать», она по-прежнему делает пару вызовов на сервере, чтобы обнаружить гиперссылку, прежде чем она вернет эту информацию обратно.
Можете ли вы, ребята, понять почему?
Благодаря
Вы пробовали '$ ('# txtPublish'). Один ('KeyUp', функция() {...' –
так один будет технически выполнить только один раз в порядке. Так что на первом каждый экземпляр KeyUp он выполняет, но не выполняет после этого? Правильно? –
Да. '.one (' будет выполняться только один раз –