2015-10-16 6 views
0

У меня есть следующее связывание jquery для прослушивания действия вставки в некоторых элементах ввода текста. Есть ли способ внутри функции получить ссылку на фактический элемент, вызвавший событие? Моя цель состоит в том, чтобы очистить текст во входном файле, если что-либо вставлено наизнанку, но «это» не кажется правильным.Связывание Jquery с несколькими элементами

Редактировать код был обновлен:

$(window).on("load", function() { 
     $('.watchable').bind("paste", function() { 
      alert('called!'); 
      $(this).val(''); 
     }); 
    }); 

Я использую JQuery 1.11.3. Я вижу предупреждение, но текст не очищается.

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

https://jsfiddle.net/8bep1Lxh/

+1

'$ (это) .val ('');' – Tushar

+0

FYI от JQuery 1.7, в '.on()' метод является предпочтительным способом прикрепления обработчиков событий к документу. – j08691

+0

Я проверил, что событие запускается с предупреждением, но текст все еще не очищается. – user1154644

ответ

1

Update

Если вы хотите всегда ясно поле при вставке попытка, тогда смотрите следующие обновленные примеры:

Мой Fiddle - https://jsfiddle.net/8v08n4vx/

Ваш Fiddle - https://jsfiddle.net/jmap4jhy/

Они предотвращают событие по умолчанию паста если поле уже не является пустым.

Если вы хотите предотвратить это вообще, просто удалите заявление if ($(this).val() !== ""){.

Моей Fiddle - https://jsfiddle.net/7Lsr7j78/

Вашего Fiddle - https://jsfiddle.net/pzb9s7s4/

(Тем не менее, вы должны думать о возможном негативном влиянии манипулируя ubiquitious события паста может иметь опыт пользователя)

$('.watchable').on('paste', function (e) { 

    //if field is not empty 
    if ($(this).val() !== "") { 

    // prevent default paste event 
    e.preventDefault(); 
    // and clear field 
    $(this).val(''); 

    } 

}); 

Увидев, что вы используете версию jQuery больше 1.7, вы должны использовать on вместо bind.

Мои Fiddle - https://jsfiddle.net/ae8ufz7y/

Ваш Обновленный скрипку - https://jsfiddle.net/83263j4e/

Вам просто нужно добавить следующий JavaScript:

$('.watchable').on('paste', function() { 
    // on paste, clear input 
    $(this).val(''); 
}); 

Вот документация Jquery по методу on : http://api.jquery.com/on/

+0

пример не работает – user1154644

+0

@ user1154644 - Он отлично работает для меня. Что не работает? Если вы вставляете что-то в текстовое поле, текущий текст исчезает и присутствует только новый текст. Разве это не происходит для вас или я неправильно понял ваши требования? –

+0

@ user1154644 - Кроме того, какой из них не работает ... моя скрипка или ваш (или оба)? Благодарю. –

0

Лучше, я думаю, чтобы отключить событие вставить вместо того, чтобы очистить текст

$('.some-el').on('paste', function() { 
    return false; 
}); 

О событии пасты значение ввода не может быть захвачен (и изменениями), поскольку изменение входного асинхронно с «пастой ' мероприятие.

Просто следующее событие может захватить значение входа после того, как событие пасты

$('.some-el').on('input', function() {});