Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Несколько target для form (https://javascript.ru/forum/dom-window/43163-neskolko-target-dlya-form.html)

Alfer 25.11.2013 01:08

Несколько target для form
 
Добрый вечер! возможно ли следующее для target:

<form id="url" name="form" target="tLink, tLink2">


т.е. для target несколько tLink? или как-то JS'ом

ruslan_mart 25.11.2013 05:42

Можно так попробовать:

document.getElementById('url').onsubmit = function() {
   var tmp = this.target, t = tmp.split(/ ?/);
   for(var i in t) {
      this.target = t[i];
      this.submit();
   }
   this.target = tmp;
   return false;
}

danik.js 25.11.2013 06:48

Ruslan_xDD,
Ну прежде чем писать, проверил бы:
alert('tLink, tLink2'.split(/ ?/))

Но это мелочи. То что ты предложил - бредятина полнейшая.
Как можно отправлять форму в цикле?

BETEPAH 25.11.2013 09:45

Цитата:

Сообщение от Alfer
или как-то JS'ом

ajax'ом, видимо

mayya 25.11.2013 09:53

document.getElementById('u_0_0 ').click();
вот ответ

Alfer 25.11.2013 12:33

Цитата:

document.getElementById('u_0_0 ').click();
не понял, поясни

ruslan_mart 25.11.2013 15:24

http://learn.javascript.ru/play/rfer6b

<!DOCTYPE HTML>
<html>
  <head> </head>
  <body>
    <iframe name="fr1" height="200px" width="100%"></iframe>
    <iframe name="fr2" height="200px" width="100%"></iframe>
    
    <form action="http://javascript.ru/" id="url" method="get" target="fr1, fr2">
      <input type="submit" value="Send">
    </form>

    <script>
      document.getElementById('url').onsubmit = function() {
        var tmp = this.target,
            target = tmp.split(/, ?/);
        for(var i in target) {
          this.target = target[i];
          this.submit();
        }
        this.target = tmp;
        return false;
      }
    </script>

  </body>
</html>

danik.js 25.11.2013 18:13

Ruslan_xDD, а теперь открой вкладку Сеть в отладчике и увидишь, что форма отправляется только один раз (открывается в новом окне). Фреймы же остаются нетронутыми.

Alfer 25.11.2013 21:07

да в новом окне открывается((

Alfer 26.11.2013 01:17

а почему в новом окне и как это исправить? почему в form action стоит javascript? можно ли без action="javascript.ru" обойтись?

Alfer 26.11.2013 02:49

Rise, Доброй ночи, я хочу введя в адресную строку сайт и нажать кнопку поиск, отобразить сайт в разных фреймах с разным размером, сейчас у меня 4 фрейма с различной шириной и высотой:

вот моя форма:
<div id="urlwrapper">
			<div class="logo"><img src="img/logo_rd_white.png" style="width:50px"/></div>
			<form id="urlform" name="form1" method="get" target="myURL">
			<input id="urlinput" name="goTo" type="text" name="url" onblur="if(this.value=='')this.value='Введите адрес сайта ...';" onfocus="if(this.value=='Введите адрес сайта ...')this.value='';" value="Введите адрес сайта ..." onclick='submitURL()'/>
			<button id="urlsubmit"><img style="margin-left:-8px" src="img/icons/magnifier.png"/></button>	
		</form>
	</div>


JS, который я использую для того чтоб вводить адреса в нужном мне формате

<script>
document.form1.onsubmit = function() {
	var url = document.form1.goTo.value;
	var validurl = 'http://www.';
	validurl += url.replace(/^(https?:\/\/(www\.)?|\/\/(www\.)?|www\.)/i, '');
	this.action = validurl;

}
</script>


и 4 фрейма

<iframe name="myURL" src="urlinput.html" height="360" width="320" scrolling="yes"></iframe>
<iframe name="myURL" src="urlinput.html" height="320" width="568" scrolling="yes"></iframe>
<iframe name="myURL" src="urlinput.html" height="620" width="358" scrolling="yes"></iframe>
<iframe name="myURL" src="waiting.html" height="384" width="640" scrolling="yes"></iframe>


с раличной шириной и высотой, сейчас в форме taget ="myURL" с одним это работает, а надо нажав в форме поиска и введя URL, отобразить его во всех фреймах одним нажатием

Rise 26.11.2013 03:41

<form name="form1">
	<input type="text" name="url" value="Введите адрес сайта ..." size="50" />
	<button type="submit">Go</button>
</form>
<iframe height="50" width="50"></iframe>
<iframe height="60" width="60"></iframe>
<iframe height="70" width="70"></iframe>
<iframe height="80" width="80"></iframe>

<script>
document.form1.url.onfocus = function() {
	if (this.value == this.defaultValue) this.value = '';
}
document.form1.url.onblur = function() {
	if (this.value == '') this.value = this.defaultValue;
}
document.form1.onsubmit = function() {
	var url = this.url.value;
	var validurl = 'http://www.';
	validurl += url.replace(/^(https?:\/\/(www\.)?|\/\/(www\.)?|www\.)/i, '');
	var iframe = document.getElementsByTagName('iframe');
	for (var key in iframe) {
		iframe[key].src = validurl;
	}
	return false;
}
</script>

Alfer 26.11.2013 04:14

Rise, а особой роли не будет играть если iframe будет обрамлен тегами подобным образом?
<ul>
  <li>
  <div><iframe height="50" width="50"></iframe></div>
  </li>
</ul>
<ul>
  <li>
  <div><iframe height="60" width="60"></iframe></div>
  </li>
</ul>
<ul>
  <li>
  <div><iframe height="70" width="70"></iframe></div>
  </li>
</ul>
<ul>
  <li>
  <div><iframe height="80" width="80"></iframe></div>
  </li>
</ul>

проверить работу JS пока нет возможности

ruslan_mart 26.11.2013 06:05

danik.js, ну так автору же походу нужно, чтобы тупо открывался сайт во фрэймах. :D
Это конечно можно решить по другому, просто меняя src у фрэймов. Но автору нужно через target вписть имена фрэймов, в который будет грузится action.

Цитата:

Сообщение от Alfer
action="javascript.ru" обойтись?

Не обойтись, обязательно должно быть javascript.ru

http://learn.javascript.ru/play/5099V

<!DOCTYPE HTML>
<html>
  <head> </head>
  <body>
    <input id="url" type="text">
    <input onclick="test()" type="button" value="test">
    <iframe name="fr" height="200px" width="100%"></iframe>
    <iframe name="fr" height="200px" width="100%"></iframe>

    <script>
      var url = document.getElementById('url'),
          fr = document.getElementsByName('fr');
      
      function test() {
        var v = url.value;
        if(v.indexOf('http://') == v.indexOf('https://')) {
          v = 'http://' + v;
        }
        for(var i=0; i<fr.length; i++) fr[i].src = v;
      }
    </script>

  </body>
</html>

danik.js 26.11.2013 08:49

Цитата:

Сообщение от Rise
document.form1.url.onfocus = function() {
    if (this.value == this.defaultValue) this.value = '';
}
document.form1.url.onblur = function() {
    if (this.value == '') this.value = this.defaultValue;
}

Вообще-то давно уже придумали placeholder.
Цитата:

Сообщение от Ruslan_xDD
danik.js, ну так автору же походу нужно, чтобы тупо открывался сайт во фрэймах.

Да когда наконец до тебя дойдет что форма может отправиться только один раз, при последнем submit(), в последний заданный target, даже если ты в цикле сменишь их тысячи. По крайней мере в хроме так.

ruslan_mart 26.11.2013 10:45

danik.js, не знаю, в опере в оба фрэйма отправляет.

Alfer 26.11.2013 16:50

не выходит ребятки, не получается

danik.js 26.11.2013 20:46

Цитата:

Сообщение от Rise
А как же IE

На дворе 11 версия. Не работает только в 8 и 9 версиях. Для них можно какой-нибудь placeholder.js прицепить.

Факт в том что большинство веб-разработчиков давно уже использует новый атрибут. Для демки так вобще тем более.

Alfer 26.11.2013 21:15

danik.js, это все хорошо, но ты бы по существу бы показал как правильно должно работать

Alfer 26.11.2013 21:28

Вложений: 1
Посмотрите, как мне все эти скрипты применить к моей схеме?

в первый слайдер вводим адрес и он грузится во всех остальных фреймах моделей смарфонов слайдера

danik.js 26.11.2013 22:04

Цитата:

Сообщение от Rise
Ну и в чем смысл менять 2 строчки js-кода на 50 из placeholder.js плюс проверка на IE9-

Смысл появится когда добавится еще несколько полей, когда придется писать дополнительные проверки при валидации, когда нужно будет выделить плейсхолдер другим цветом и тд.

В общем, кому как. Мне проще добавить одну строчку в html и вообще не париться ни о каких проблемах:
<!--[if lt IE 10]><script src="scripts/placeholder.js"></script><![endif]-->


Вдобавок [placeholder] работает даже с отключенным (читай noscript или медленный канал посетителя) JS.


Часовой пояс GMT +3, время: 19:33.