Jquery предотвращает перетаскивание значения текста - PullRequest
2 голосов
/ 06 мая 2010

У меня есть текстовое поле html, в котором я привязал функцию через jQuery к событию вставки, чтобы пользователи не вставляли значение в текстовое поле. Эта функциональность работает хорошо.

Однако можно выделить какой-либо текст из другого текстового поля на странице и перетащить его в текстовое поле, в котором вставки запрещены. Есть ли событие jQuery, которое я могу связать, чтобы пользователи не могли перетаскивать текст в текстовое поле?

Ответы [ 5 ]

3 голосов
/ 06 мая 2010

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

Однако ... предупреждение о взломе ...

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

ВАРИАНТ 1:

$(document).ready(function () {

    // Get the control from which the drag should be disallowed
    var originator = $(".start");

    // Disable text selection
    if ($.browser.mozilla) {
        originator.each(function () { $(this).css({ 'MozUserSelect': 'none' }); });
    } 
    else if ($.browser.msie) {
        originator.each(function () { $(this).bind('selectstart.disableTextSelect', 
           function () { return false; }); });
    } 
    else {
        originator.each(function () { $(this).bind('mousedown.disableTextSelect', 
           function () { return false; }); });
    }

});

Но это ДЕЙСТВИТЕЛЬНО раздражает.

ВАРИАНТ 2:

Вы можете отключить окно подтверждения, когда пользователь перетаскивает элемент:

$(document).ready(function () {

    // Get the control which dropping should be disallowed
    var originator = $("#emailBox");

    // Trap when the mouse is up/down
    originator.mousedown(function (e) {
        $("#confirmationBox").attr('disabled', 'disabled');
    });
    originator.mouseup(function (e) {
        $("#confirmationBox").attr('disabled', '');
    });

});

ВАРИАНТ 3:

Сделайте одолжение вашим пользователям и избавьтесь от окна подтверждения.

1 голос
/ 17 ноября 2018

Добавьте ondrop="return false;" к тем элементам ввода, где вы хотите отключить удаление текста.

input {
  -webkit-user-select: auto;
  user-select: auto;
  -webkit-user-drag: none;
}
<article>
  <input type="text" placeholder="Write text, select it, and drag" >
  <input type="text" placeholder="Then drop text here" ondrop="return false;">
</article>
0 голосов
/ 05 апреля 2019

В моем случае, основываясь на ответе @ Prateek, я сделал что-то в jquery: я добавил к некоторым конкретным текстовым полям следующий атрибут: ondrop = "return false;" ...

Мой код был:

// Prevents to drag and drop from text input fields.
    $("#MyInput").attr("ondrop","return false;");

После добавления это работает отлично.

Надеюсь, что это может помочь другим.

0 голосов
/ 25 июля 2013

Два решения

1 Вы можете сформулировать проблему следующим образом: вы хотите, чтобы пользователь использовал клавиатуру для ввода значения. Вы можете посчитать количество нажатий клавиш. Затем в событии изменения, когда ввод теряет фокус, вы должны иметь количество нажатий клавиш, по крайней мере равное количеству символов в значении.

2 Вы можете использовать функцию интервала для частой проверки различий в значениях ввода. Если разница состоит в слишком большом количестве символов, внезапно отклоните изменение, потому что оно может быть связано только с вставкой текста. От вас зависит выбор частоты и максимального количества нажатий клавиш, которые считаются достижимыми человеком в этот период времени.

0 голосов
/ 06 мая 2010

К сожалению, это невозможно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...