|
|
|
| Допустим, есть разметка:
<!--<?-->
<table>
<tr>
<td><input type="text" name="imya[1]" id="imya1"></td>
<td><input type="text" name="fami[1]" id="fami1"></td>
<td><input type="text" name="otch[1]" id="otch1"></td>
</tr>
<tr>
<td><input type="text" name="imya[2]" id="imya2"></td>
<td><input type="text" name="fami[2]" id="fami2"></td>
<td><input type="text" name="otch[2]" id="otch2"></td>
</tr>
<tr>
<td><input type="text" name="imya[3]" id="imya3"></td>
<td><input type="text" name="fami[3]" id="fami3"></td>
<td><input type="text" name="otch[3]" id="otch3"></td>
</tr>
</table>
|
и в буфере CSV-файл:
Иванов;Иван;Иванович;
Петров;Пётр;Петрович;
Сидоров;Сидор;Сидорович;
|
Как сделать, чтобы, если фокус находится в id="imya1" и произведена попытка вставки из буфера любым способом (хоть Ctrl+V, хоть Shift+Insert, хоть мышкой и т.п.), то значения разбросались по соответствующим input'ам? | |
|
|
|
|
|
|
|
для: Sfinks
(02.11.2012 в 10:41)
| | Вы для себя это делаете или для пользователей? | |
|
|
|
|
|
|
|
для: confirm
(02.11.2012 в 11:24)
| | И для себя, и для пользователей.
Но пользователи подконтрольные - с зарплатой и штрафами за некорректное использование =)) | |
|
|
|
|
|
|
|
для: Sfinks
(02.11.2012 в 13:11)
| | А если для пользователей, то каким образом вы обеспечите работу с буфером обмена во всех браузерах? Кто, что и откуда копирует в буфер?
Копирование мышкой... так она не копирует ничего, мышкой можно выбрать только пункт этот из системного меню браузера, а это системное событие (сообщение системы), и документ о нем вообще ничего не подозревает.
По иному нельзя подойти к решению? | |
|
|
|
|
|
|
|
для: confirm
(02.11.2012 в 13:41)
| | > Кто, что и откуда копирует в буфер?
Вот Вы любите на отстраненные темы поговорить =)
Откуда скажу - оттуда и будут копировать. Будут копировать не правильно - не будет работать. Не будет работать, будут вбивать вручную. Будут вбивать вручную - ниче не успеют сделать. Ниче не успеют - ШТРАФ, ВЫГОВОР, УВОЛЬНЕНИЕ! =))
> а это системное событие (сообщение системы), и документ о нем вообще ничего не подозревает.
Вот я и не знал, подозревает или нет. А window тоже не подозревает?
Тогда, допустим, только по Ctrl+V....
Задача сводится к:
Как это перехватить, отменить системную вставку и получить содержимое буфера в переменную? | |
|
|
|
|
|
|
|
|
для: Deed
(02.11.2012 в 14:19)
| | Спасибо, почитаю. | |
|
|
|
|
|
|
|
для: Sfinks
(02.11.2012 в 14:12)
| | Что значит отстраненные? Копировать со страницы - тогда зачем вообще нужно копирование, если в этом случае можно просто выбирать готовое из того же массива?
Копировать из другой программы - тоже вопросы.
Ведь можно ничего не перехватывать, потому и... | |
|
|
|
|
|
|
|
для: confirm
(02.11.2012 в 14:47)
| | А я думал вы о том, как я добьюсь от пользователей именно того, что мне нужно =)
Ладно, уже не важно. Ответов уже достаточно =) | |
|
|
|
|
|
|
|
для: Sfinks
(02.11.2012 в 19:03)
| | Нет, не об этом. Я как раз сначала и задаю вопрос, в данном случае себе - зачем это нужно? Неужели прямо на странице - Петр;Петрович;Петров, которое потом в буфер обмена помещать? Что-то не очень то "опрятно". А если нет, то причем тут вообще буфер обмена, и нужно ли копирование вообще? | |
|
|
|
|
|
|
|
для: confirm
(03.11.2012 в 04:32)
| | пытаетесь опровергнуть академика Павлова?
тот же убедительно доказал - на примере братьев наших меньших - что пока не лизнёшь горячую сковородку, никому не веришь, что облизывать её не стоит...
:) | |
|
|
|
|
|
|
|
для: ЯСА
(03.11.2012 в 10:53)
| | :)
Читаю - "и в буфере CSV-файл...". Не может быть в буфере никаких файлов, тем более CSV и прочих форматов, буфер хранит данные в своем формате. Но это можно простить по незнанию, но что пытаются заставить делать пользователя, если речь идет о файле определенного формата, который кто-то, не понятно кто, скопировал в буфер обмена? Начинаешь представлять это в рамках HTML и тебя начинает бросать в легкий ступор.
Я сторонник того, что сперва думаем надо ли считать в данном случае, а уже как считать, в столбик или иначе, это второстепенное и является действием второго плана. Наоборот, это уже абсурд. ) | |
|
|
|
|
|
|
|
для: confirm
(03.11.2012 в 11:09)
| | ЯСА прав.
В подавляющем большинстве случаев это трата времени и Вашего и моего. Т.к. если человек не спрашивает "как лучше сделать (решить, организовать)", а просит реализацию конкретной задачи, значит он уже решил, что ему надо именно так. И переубедить его сможет только практика =)
Я уже давно отвечая на форуме руководствуюсь именно этим принципом. | |
|
|
|
|
|
|
|
для: Sfinks
(03.11.2012 в 11:23)
| | А смыл думать над задачей, которая в итоге в помойку уйдет? Вот я и не трачу время, как вы выражаетесь. ) | |
|
|
|
|
|
|
|
для: Sfinks
(02.11.2012 в 10:41)
| | формат у вас смешной
в CSV-файле -- фамилия;имя;отчество
а в ячейке таблицы -- имя;фамилия;отчество
"Пётр Петров Петрович" -- это что-то балканское получается :))
-----
для случая, если не касаться вопроса получения буфером информации (т.е. если полагать, что текстовое содержание CSV-файла в буфере точно есть и проверять его наличие и формат не надо), решение для любого способа ввода из буфера - оно несложное
однако есть несколько вопросов:
-- работать должно при клике по любому из инпутов или только по imya1?
-- количество ячеек всегда будет совпадать с количеством персон в буфере, или возможны все варианты (и >, и ==, и <; и что делать в двух крайних случаях)?
-- кроссбраузерное решение надо или юзер-агент известен? | |
|
|
|
|
|
|
|
для: ЯСА
(02.11.2012 в 14:18)
| | > "Пётр Петров Петрович" -- это что-то балканское получается :))
Это моя очепятка =) Порядок полей одинаковый в HTML и в CSV.
-- работать должно при клике по любому из инпутов или только по imya1?
Только при вставке в первом столбце первой строки
-- количество ячеек всегда будет совпадать с количеством персон в буфере, или возможны все варианты (и >, и ==, и <; и что делать в двух крайних случаях)?
Главное увидеть принцип. Количество я доработаю.
Скорее всего в HTML будет 1 строка, а в CSV - любое количество и добавление строк по мере необходимости уже в процессе.
Для примера можно считать что и там и там - 3, как в первом посте.
-- кроссбраузерное решение надо или юзер-агент известен?
Браузер - Хром у всех.
Но если покажете кроссбраузерный вариант - будет супер. А то вдруг что изменится потом. | |
|
|
|
|
|
|
|
для: Sfinks
(02.11.2012 в 14:33)
| |
<input id="fami1" oninput="myFunc (this)" onpropertychange="myFunc (this, 1)">
...
<script>
function myFunc (obj, msie)
{
if (self.afore) return; afore = true;
if (msie)
{
obj.onpropertychange = null; var hid = document.body.appendChild (
document.createElement ('<textarea style="width: 1px; height: 1px; visibility: hidden"></textarea>'));
var txtRng = hid.createTextRange (); txtRng.execCommand ('Paste'); txtRng = hid.createTextRange ();
var txt = txtRng.text; document.body.removeChild (hid);
}
else {var txt = obj.value; obj.oninput = null}
txt = txt.replace (/[\r\n]/g, ' ').replace (/\s+/g, ' ').slice (0, -1);
var arr = txt.split ('; ');
for (var j = 0, lj = arr.length; j < lj; j++) arr [j] = arr [j].split (';');
while (obj.tagName != 'TABLE') obj = obj.parentNode;
var str = 'fami456789imya456789otch';
for (var obj = obj.getElementsByTagName ('input'), j = 0, lj = obj.length; j < lj; j++)
{
var ind = str.indexOf ((obj [j].id).slice (0, 4));
if (ind != -1) obj [j].value = arr [(obj [j].id).substr (4) - 1] [parseInt (ind / 10)];
}
}
</script>
|
| |
|
|
|
|
|
|
|
для: ЯСА
(02.11.2012 в 16:46)
| | Большое спасибо! Буду разбираться =) | |
|
|
|