Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Обращение к форме
 
 автор: Denisich84   (12.02.2012 в 17:35)   письмо автору
 
 

Как обратиться к форе и скопировать содержимое <textarea>...</textarea> при клике по номеру id.
при клике сразу по <textarea> все работает нормально
<html>

<head>
<meta http-equiv="Content-Language" content="en-us">
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>1</title>
</head>

<body>

<table border="1" cellspacing="0" cellpadding="0" width="39%" id="table1">
    <tr>
        <td align="center">Id</td>
        <td width="263" align="center"><span lang="ru">Ответ</span></td>
    </tr>
    <tr>
        <td align="center"><a target="top" onClick="window.open('http://ya.ru'); yourForm.createTextRange().execCommand('Copy');">    308158</a></td>
        <td width="263" align="center">
        <form><textarea name="yourForm" rows=1 cols=30  onClick="javascript:this.form.yourForm.focus();this.form.yourForm.select(); yourForm.createTextRange().execCommand('Copy');" style="font-size: 8pt">year247391</textarea><br>
            <input type="button" onClick="yourForm.createTextRange().execCommand('Copy')" value="Копировать" style="font-size: 10px"></form>
        </font></td>
    </tr>
    <tr>
        <td align="center"><a target="top" onClick="window.open('http://ya.ru'); yourForm.createTextRange().execCommand('Copy');">    308875</a></td>
        <td width="263" align="center"><form><textarea name="yourForm" rows=1 cols=30  onClick="javascript:this.form.yourForm.focus();this.form.yourForm.select(); yourForm.createTextRange().execCommand('Copy');" style="font-size: 8pt">ar254391</textarea><br>
            <input type="button" onClick="yourForm.createTextRange().execCommand('Copy')" value="Копировать" style="font-size: 10px"></form>
        </font></td>
    </tr>
</table>

</body>

</html>

  Ответить  
 
 автор: ЯСА   (12.02.2012 в 17:59)   письмо автору
 
   для: Denisich84   (12.02.2012 в 17:35)
 

1. А зачем вам здесь вообще тег <form> и даже целых два?

2. Почему у вас два разных TEXTAREA в двух разных формах имеют одно и то же имя yourForm ? Это для прикола? Когда клиент нажимает на любую из двух кнопок "Копировать", браузер должен угадать - о каком из двух yourForm идёт речь? Вы в курсе, что по статистике браузер будет ошибаться ровно половину раз?

3. Почему в одном случае - при клике по TEXTAREA - у вас прописан протокол javascript:, а в другом - при клике по кнопке "Копировать" - не прописан? Почему кнопку-то обидели? Зачем этот javascript: вам вообще нужен? У вас, что, на странице вызываются ещё и на других языках скрипты?

4. Почему в одной строчке кода вы к одному и тому же объекту обращаетесь по-разному? Дважды он у вас this.form.yourForm, а в третий раз - yourForm ? Подсказываю - во всех трёх случаях обращение можно заменить коротким this - это и будет тот самый объект, который вы натужно и по-разному именуете. Сравните:
onClick="javascript:this.form.yourForm.focus();this.form.yourForm.select(); yourForm.createTextRange().execCommand('Copy');"
и
onClick="this.focus();this.select(); this.createTextRange().execCommand('Copy');"


5. Вы в курсе, что execCommand() работает только в браузере MSIE и нигде более? Вас это устраивает?

6. Вы в курсе, что createTextRange() также работает только в MSIE?

  Ответить  
 
 автор: Denisich84   (12.02.2012 в 18:50)   письмо автору
 
   для: ЯСА   (12.02.2012 в 17:59)
 

1. кнопка копировать стоит в форме и знает из какой формы и что ей нужно копировать))
поторопился наверно вот и написал так)
2 конечно если я буду кликать по ссылке и брать данные из разных форм то у них должны быть свое имя. Тут может даже и не быть кнопок, просто это осталось от старого примера,
смыс в том что мне нужно сделать клик по номеру ID по цыфре 308158 чтобы открылась ссылка в данном случае яндекс и нужно чтобы скопировалось содержимое TEXTAREA т.е. year247391., чтобы одним действием совершить два события)
3. Да в курсе, не устраивает ну а что делать ни кто же не поможет и не напишет мне код.

  Ответить  
 
 автор: ЯСА   (12.02.2012 в 19:10)   письмо автору
 
   для: Denisich84   (12.02.2012 в 18:50)
 

Ответьте ещё на один вопрос - в зависимости от вашего ответа я или смогу помочь вам с кодом, или не смогу:
Положим, при нажатии на что-то у вас открылось окно Яндекса и одновременно с этим какие-то данные скопировались в буфер обмена. Что вы с этими данными из буфера памяти далее делать предполагаете?

  Ответить  
 
 автор: Denisich84   (12.02.2012 в 19:15)   письмо автору
 
   для: ЯСА   (12.02.2012 в 19:10)
 

Копироваться будет только текст а потом просто этот текст из буфера буду руками вставлять на другой странице в другое подобное окно либо в блокнот это уже не сильно важно.

  Ответить  
 
 автор: ЯСА   (12.02.2012 в 19:22)   письмо автору
 
   для: Denisich84   (12.02.2012 в 19:15)
 

Ага.

Я-то думал, что скопированый текст нужен вам для вставки в строку поиска Яндекса, который открывается в новом окне. Тогда бы я смог помочь непосредственно.

Но раз - нет, тогда подсказываю: кроссбраузерного решения на JavaScript по использованию буфера обмена НЕ СУЩЕСТВУЕТ.
Можно решить проблему кроссбраузерно, используя флеш.
И это - единственный способ. См. здесь - http://apofig.blogspot.com/2010/02/javascript.html

  Ответить  
 
 автор: Denisich84   (12.02.2012 в 20:34)   письмо автору
 
   для: ЯСА   (12.02.2012 в 19:22)
 

Посмотрю)

  Ответить  
 
 автор: Denisich84   (12.02.2012 в 21:00)   письмо автору
 
   для: Denisich84   (12.02.2012 в 20:34)
 

фигня какая то ни че не работает! ну а если сделать только для эксплорера? при нажатии на кнопку копировать текст же копируется. Что нельзя как то прописать onClick - ку функцию чтобы он скопировал из формы текст?
даже если вставить ссылку в форму тоже все работает и копирование и открытие окна)

  Ответить  
 
 автор: ЯСА   (12.02.2012 в 21:48)   письмо автору
 
   для: Denisich84   (12.02.2012 в 21:00)
 

Как я понял, вам тогда вовсе не нужны кнопки "Копировать", так?

Итак, описываю задачу:
1. Имеете в каждой строке таблицы слева - текст, содержащий ID, с правой стороны - TEXTAREA с каким-то содержимым.
2. При клике по тексту слева: а) открывается новое окно и б) текущее содержимое заносится в буфер памяти.
3. И всё это будет работать только в MSIE.

Верно я понял задачу?
Если верно, то могу нарисовать - это несложно.

PS. Один только вопросик остаётся - положим, клиент кликнул, окно со стартовой страницей Яндекса открылось, данные из буфера он как-то где-то использовал... а затем, не закрывая окна с Яндексом, вернулся к основному окну и кликнул по другому ID - надо ещё одно новое окно с Яндексом открывать? Или же в уже открытое по прошлому клику окно заново помещать стартовую страницу Яндекса?

  Ответить  
 
 автор: Denisich84   (13.02.2012 в 22:13)   письмо автору
 
   для: ЯСА   (12.02.2012 в 21:48)
 

Да вы все верно поняли)
затем, не закрывая окна с Яндексом, вернулся к основному окну и кликнул по другому ID - надо ещё одно новое окно с Яндексом открывать!

  Ответить  
 
 автор: ЯСА   (13.02.2012 в 22:47)   письмо автору
 
   для: Denisich84   (13.02.2012 в 22:13)
 

<html>
<head>
<script>
function woB (x)
{
while (x.tagName != 'TD') x = x.parentNode;
with (x.nextSibling.firstChild) {select (); createTextRange ().execCommand ('Copy')}
window.open ('http://ya.ru', '_blank');
}
//Любителям писать "красивые" коды (с пробелами, табуляцией, отступами...) для надёжности
//firstChild следует заменить на getElementsByTagName ('TEXTAREA') [0]
</script>
</head>
<body>
<table border>
<tr><th>ID</th><th>Answer</th></tr>
<tr><td onclick="woB (this)">111</td><td><textarea>AAA</textarea></td></tr>
<tr><td onclick="woB (this)">222</td><td><textarea>BBB</textarea></td></tr>
</table>
</body>
</html>

  Ответить  
 
 автор: Denisich84   (14.02.2012 в 06:45)   письмо автору
 
   для: ЯСА   (13.02.2012 в 22:47)
 

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

  Ответить  
 
 автор: Denisich84   (14.02.2012 в 07:39)   письмо автору
 
   для: Denisich84   (14.02.2012 в 06:45)
 

Я в этом можно сказать не шарю, у меня получилось так
<html>
<head>
<script>
function woB1 (x)
{
while (x.tagName != 'TD') x = x.parentNode;
with (x.nextSibling.getElementsByTagName ('TEXTAREA') [0]) {select (); createTextRange ().execCommand ('Copy')}
window.open ('http://ya.ru', '_blank');
}
</script>

<script>
function woB2 (x)
{
while (x.tagName != 'TD') x = x.parentNode;
with (x.nextSibling.getElementsByTagName ('TEXTAREA') [0]) {select (); createTextRange ().execCommand ('Copy')}
window.open ('http://mail.ru', '_blank');
}
</script>
</head>

<body>
<table border>
<tr><th>ID</th><th>Answer</th></tr>
<tr><td onclick="woB1 (this)">111</td><td><textarea>AAA</textarea></td></tr>
<tr><td onclick="woB2 (this)">222</td><td><textarea>BBB</textarea></td></tr>
<tr><td onclick="woB3 (this)">333</td><td><textarea>ССС</textarea></td></tr>

</table>
</body>
</html>


Может можно как то упростить?

  Ответить  
 
 автор: ЯСА   (14.02.2012 в 08:08)   письмо автору
 
   для: Denisich84   (14.02.2012 в 07:39)
 

Можно:
<html>
<head>
<script>
function woB (x, y)
{
while (x.tagName != 'TD') x = x.parentNode;
with (x.nextSibling.getElementsByTagName ('TEXTAREA') [0])
   {select (); createTextRange ().execCommand ('Copy')}
window.open ('http://' + y, '_blank');
}
</script>
</head>
<body>
<table border>
<tr><th>ID</th><th>Answer</th></tr>
<tr><td onclick="woB (this, 'yandex.ru')">111</td><td><textarea>AAA</textarea></td></tr>
<tr><td onclick="woB (this, 'mail.ru'  )">222</td><td><textarea>BBB</textarea></td></tr>
<tr><td onclick="woB (this, 'mozga.net')">333</td><td><textarea>CCC</textarea></td></tr>
</table>
</body>
</html>

  Ответить  
 
 автор: Denisich84   (14.02.2012 в 08:54)   письмо автору
 
   для: ЯСА   (14.02.2012 в 08:08)
 

Спасибо все работает)

  Ответить  
 
 автор: Denisich84   (14.02.2012 в 13:12)   письмо автору
 
   для: Denisich84   (14.02.2012 в 08:54)
 

Чет опять не могу догнать
а если у меня 3 или 4 столбца почему он не капирует???

например таблица

<table border>
<tr><th>ID</th><th>Answer</th></tr>
<tr><td onclick="woB (this, 'yandex.ru')">111</td><td>AAA</td><td><textarea>AAA</textarea></td></tr>
<tr><td onclick="woB (this, 'mail.ru'  )">222</td><td>AAA</td><td><textarea>BBB</textarea></td></tr>
<tr><td onclick="woB (this, 'mozga.net')">333</td><td>AAA</td><td><textarea>CCC</textarea></td></tr>
</table> 

  Ответить  
 
 автор: ЯСА   (14.02.2012 в 15:23)   письмо автору
 
   для: Denisich84   (14.02.2012 в 13:12)
 

А что конкретно скрипт должен в этом случае копировать?

Положим, нажал юзер на id=111, т.е. на самую верхнюю левую ячейку.
Напишите здесь нужную вам строку, которая должна оказаться в клипборде юзера.
ААА?
АААААА?
ААА ААА?
ААА+ААА?
ААА, ААА?
ААА и ААА?
...

  Ответить  
 
 автор: Denisich84   (14.02.2012 в 16:18)   письмо автору
 
   для: ЯСА   (14.02.2012 в 15:23)
 

все тоже самое как и было кликаю в строчке по Id и копирую содержимое <textarea>AAA</textarea>
просто если добавляю еще столбики в строчке то ни чего не работает
Положим, нажал юзер на id=111 должно скопироваться <textarea>AAA</textarea>

  Ответить  
 
 автор: ЯСА   (14.02.2012 в 18:29)   письмо автору
 
   для: Denisich84   (14.02.2012 в 16:18)
 

Ели бы добавили столбик с правого края, то работало бы.
Но вы умудрились втюхать столбик между ID и Answer.

А логика скрипта исходила из того, что <TEXTAREA> находится в соседнем справа с ID столбце.
Я, конечно, напишу вам скрипт и для этого вашего случая.

Только предупредите сразу - а перед столбцом с ID вам не захочется ещё один (или несколько) столбцов вставить?
А между столбцом с ID и столбцом с <TEXTAREA> вам не захочется втюхать не просто несколько столбцов, а столбцов тоже с <TEXTAREA>, но не с такими, содержание которого надо запоминать, а с другими, содержание которых к скрипту отношения не имеет?

Ответьте уж, пожалуйста.
Чтобы я сразу понял всю бесполезность моих усилий. :-((

  Ответить  
 
 автор: Denisich84   (14.02.2012 в 19:16)   письмо автору
 
   для: ЯСА   (14.02.2012 в 18:29)
 

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

<html>
<head>
<script>
function woB (x, y)
{
while (x.tagName != 'TD') x = x.parentNode;
with (x.nextSibling.getElementsByTagName ('TEXTAREA') [0])
   {select (); createTextRange ().execCommand ('Copy')}
window.open ('http://' + y, '_blank');
}
</script>
</head>
<body>
<table border>
<tr><th><span lang="ru">№</span></th><th>ID</th><th><span lang="ru">Цена</span></th><th>
    <span lang="ru">Время</span></th><th>Answer</th></tr>
<tr><td onclick="woB (this, 'yandex.ru')"><span lang="ru">1</span></td><td onclick="woB (this, 'yandex.ru')">111</td><td>
    <span lang="ru">1</span></td><td><span lang="ru">24</span></td><td><textarea>AAA</textarea></td></tr>
<tr><td onclick="woB (this, 'mail.ru'  )"><span lang="ru">2</span></td><td onclick="woB (this, 'mail.ru'  )">222</td><td>
    <span lang="ru">2</span></td><td><span lang="ru">24</span></td><td><textarea>BBB</textarea></td></tr>
<tr><td onclick="woB (this, 'mozga.net')"><span lang="ru">3</span></td><td onclick="woB (this, 'mozga.net')">333</td><td>
    <span lang="ru">3</span></td><td><span lang="ru">24</span></td><td><textarea>CCC</textarea></td></tr>
</table>
</body>
</html>

  Ответить  
 
 автор: ЯСА   (15.02.2012 в 10:19)   письмо автору
 
   для: Denisich84   (14.02.2012 в 19:16)
 

<script>
function woB (x, y)
{
while (x.tagName != 'TR') x = x.parentNode;
for (var obj = x.cells, j = 0, lj = obj.length; j < lj; j++)
if (obj [j].getElementsByTagName ('TEXTAREA').length) break;
with (obj [j].getElementsByTagName ('TEXTAREA') [0])
   {select (); createTextRange ().execCommand ('Copy')}
window.open ('http://' + y, '_blank');
}
</script>

  Ответить  
 
 автор: Denisich84   (15.02.2012 в 15:52)   письмо автору
 
   для: ЯСА   (15.02.2012 в 10:19)
 

Спасибо вроде работает если я опять че неть не выдумаю))))

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования