Есть некая форма для постинга новостей, вот её код:
<form action="up.php" id="upl" method="POST" onsubmit="return AIM.submit(this, {'onStart' : startCallback, 'onComplete' : completeCallback})" enctype="multipart/form-data">
<input type="file" name="image[]" id="image_1" />
<input type="hidden" value="hh">
<br id="clear">
<div><input type="submit" id="submitpics" value="Закачать" /></div>
</form>
<form method="POST" name="addnews" action="<?php echo $_SERVER['PHP_SELF']; ?>">
<p align=left>Заголовок:
<input name="title" value="" size="90" maxlength="200" type="text">
</p>
<p align=left>Сообщение:
<a href="#" onclick="insertBBCode(textarea, 'b'); return false" title="Жирный"> B </a>
<a href="#" onclick="insertBBCode(textarea, 'i'); return false" title="Курсив"> <i>I</i> </a>
<div><font size=2># Число отправленных картинок: <span id="nr">0</span></font></div>
<textarea name="text" id="inpic" id="textar" rows="15" cols="92"></textarea>
<br>
</p>
<p><input value="Предпросмотр" name="submit" type="submit"></p><p>
<p><input value="Запостить" name="mysql" type="submit"></p>
</form>
1.Функция для вставки BBcode:
function insertBBCode(taObj, bbTag, promptText) {
if (!taObj) return false;
var caretPos = 0;
var start = 0;
var end = 0;
var selText;
var openBB = "";
if (promptText) {
var usText = prompt(promptText, '');
if (usText) openBB = "["+bbTag+"="+usText+"]";
else openBB = "["+bbTag+"]";
}
else {openBB = "["+bbTag+"]";}
var closeBB = "[/"+bbTag+"]";
taObj.focus();
if (document.getSelection || window.getSelection) {
start = taObj.selectionStart;
end = taObj.selectionEnd;
}
else if (document.selection) {
var sel = document.selection.createRange();
var clone = sel.duplicate();
sel.collapse(true);
clone.moveToElementText(taObj);
clone.setEndPoint("EndToEnd", sel);
start = clone.text.length;
sel = document.selection.createRange();
clone = sel.duplicate();
sel.collapse(false);
clone.moveToElementText(taObj);
clone.setEndPoint("EndToEnd", sel);
end = clone.text.length;
}
if (start === end) {
var str = taObj.value;
taObj.value = str.substring(0, start)+openBB+closeBB+str.substr(start);
var nPos = start+openBB.length;
if (taObj.createTextRange) {
var caret = taObj.createTextRange();
caret.collapse();
caret.moveStart("character", nPos);
caret.select();
}
else if(window.getSelection) {
taObj.setSelectionRange(nPos, nPos);
taObj.focus();
}
}
else if (start < end) {
var str = taObj.value;
selText = str.substring(start, end);
taObj.value = str.substring(0, start)+openBB+selText+closeBB+str.substr(end);
}
}
var textarea = null;
window.onload = function() {
textarea = document.getElementById('textar');
}
2. Функция автоматического добавления поля для загрузки картинок
////////////////Вставка картинки
function startCallback() {
// make something useful before submit (onStart)
return true;
}
function completeCallback(response) {
// make something useful after (onComplete)
document.getElementById('nr').innerHTML = parseInt(document.getElementById('nr').innerHTML) + 1;
document.getElementById('inpic').innerHTML = response;
}
////////////////Вставка input
function checkExpand(){
var childrens = document.getElementById('upl').childNodes;
var bExpand = true;
//Проходим по всем элементам формы и ищем пусты file input'ы
for (var i = 0; i < childrens.length; i++) {
if ( childrens.item(i).type == 'file' && childrens.item(i).value == ''){
bExpand = false; //Нашли пустой, новый не нужен
}
}
//Добавляем еще один file input, если нужно
if ( bExpand ){
document.getElementById('upl').insertBefore(createNewInput(), document.getElementById('clear'));
}
}
function createNewInput() {
input = document.createElement("input");
input.setAttribute("type", "file");
input.setAttribute("name", 'image[]');
input.onchange = checkExpand;
return input;
}
function addLoadEvent(func) {
var oldonload = window.onload;
if (typeof window.onload != 'function') {
window.onload = func;
} else {
window.onload = function() {
if (oldonload) {
oldonload();
}
func();
}
}
}
addLoadEvent(function() {
document.getElementById('image_1').onchange = checkExpand;
});
/**
*
* AJAX IFRAME METHOD (AIM)
* http://www.webtoolkit.info/
*
**/
AIM = {
frame : function(c) {
var n = 'f' + Math.floor(Math.random() * 99999);
var d = document.createElement('DIV');
d.innerHTML = '<iframe style="display:none" src="about:blank" id="'+n+'" name="'+n+'" onload="AIM.loaded(\''+n+'\')"></iframe>';
document.body.appendChild(d);
var i = document.getElementById(n);
if (c && typeof(c.onComplete) == 'function') {
i.onComplete = c.onComplete;
}
return n;
},
form : function(f, name) {
f.setAttribute('target', name);
},
submit : function(f, c) {
AIM.form(f, AIM.frame(c));
if (c && typeof(c.onStart) == 'function') {
return c.onStart();
} else {
return true;
}
},
loaded : function(id) {
var i = document.getElementById(id);
if (i.contentDocument) {
var d = i.contentDocument;
} else if (i.contentWindow) {
var d = i.contentWindow.document;
} else {
var d = window.frames[id].document;
}
if (d.location.href == "about:blank") {
return;
}
if (typeof(i.onComplete) == 'function') {
i.onComplete(d.body.innerHTML);
}
}
}
То есть, когда мы закачиваем какую-либо картинку, в поле ввода самой новости вставляется строка такого вида:
[img]http://example.com/img/image.jpg[/img]
Сама проблема, как мне кажется, состоит в том, что один textarea используют эти две функции. Поиск ничего вразумительного не выдал.
Спустя 2 минуты, 58 секунд (12.08.2010 - 16:27) Lenarfate написал(а):
Цитата |
<textarea name="text" id="inpic" id="textar" rows="15" cols="92"> |
только один id может быть. удивительно, как вообще что-то работает
да, и не java, а javascript
Спустя 4 минуты, 39 секунд (12.08.2010 - 16:32) phpnub написал(а):
Цитата |
<textarea name="text" id="inpic" id="textar" rows="15" cols="92"> только один id может быть. удивительно, как вообще что-то работает |
Сорри, это я эксперементировал и забыл стереть. В том то и дело, что по отдельности они работают...
Спустя 3 минуты, 6 секунд (12.08.2010 - 16:35) Lenarfate написал(а):
а для чего тебе картинки привязывать к текстовому полю?
Спустя 5 минут, 2 секунды (12.08.2010 - 16:40) phpnub написал(а):
Цитата (Lenarfate @ 12.08.2010 - 13:35) |
а для чего тебе картинки привязывать к текстовому полю? |
Для наглядного редактирования, т.е. я хочу запостить группу картинок и подписи под ними нажимаю на добавить картинку, выбираю её и появляется автоматически следующий input, затем загружаю их и у меня в textarea автаматически вставляются коды этих картинок... Или есть другой более удобный способ?
Спустя 2 минуты, 51 секунда (12.08.2010 - 16:43) Lenarfate написал(а):
ну так подгреби все под один id
Спустя 4 минуты, 4 секунды (12.08.2010 - 16:47) phpnub написал(а):
Цитата (Lenarfate @ 12.08.2010 - 13:43) |
ну так подгреби все под один id |
Пробовал - не помогло... пробовал и getElementByClass с изменением id на class и тоже не помогло...
Спустя 2 минуты, 50 секунд (12.08.2010 - 16:49) Lenarfate написал(а):
во всех скриптах проставлял один id?
Спустя 4 минуты, 7 секунд (12.08.2010 - 16:54) phpnub написал(а):
Цитата (Lenarfate @ 12.08.2010 - 13:49) |
во всех скриптах проставлял один id? |
Было:
.....
var textarea = null;
window.onload = function() {
textarea = document.getElementById('textar');
}
.....
function completeCallback(response) {
// make something useful after (onComplete)
document.getElementById('nr').innerHTML = parseInt(document.getElementById('nr').innerHTML) + 1;
document.getElementById('inpic').innerHTML = response;
}
.....
Исправил на:
.....
var textarea = null;
window.onload = function() {
textarea = document.getElementById('textar');
}
.....
function completeCallback(response) {
// make something useful after (onComplete)
document.getElementById('nr').innerHTML = parseInt(document.getElementById('nr').innerHTML) + 1;
document.getElementById('textar').innerHTML = response;
}
.....
И изменил:
<textarea name="text" id="textar" rows="15" cols="92"></textarea>
Спустя 5 минут, 11 секунд (12.08.2010 - 16:59) Lenarfate написал(а):
и?
вообще лучше не делай все в один теккстареа
вообще лучше не делай все в один теккстареа
Спустя 3 минуты, 7 секунд (12.08.2010 - 17:02) phpnub написал(а):
Цитата (Lenarfate @ 12.08.2010 - 13:59) |
и? вообще лучше не делай все в один теккстареа |
Не работает... а как тогда правильнее будет, если не в один textarea ? Как тогда можно будет манипулировать загруженными картинками?
Спустя 2 минуты, 39 секунд (12.08.2010 - 17:05) Lenarfate написал(а):
var textarea = null;
window.onload = function() {
textarea = document.getElementById('textar');
вот тут inpic поставь попробуй, и в поля оставь только его.
Спустя 6 минут, 31 секунда (12.08.2010 - 17:11) phpnub написал(а):
Цитата (Lenarfate @ 12.08.2010 - 14:05) |
var textarea = null; вот тут inpic поставь попробуй, и в поля оставь только его. |
Поменял textar на inpic и тоже не работают вместе... С одинаковым id не хотят работать... только кто-то один работает. Может есть другой способ как-нибудь их обмануть? )
Спустя 4 минуты, 48 секунд (12.08.2010 - 17:16) Lenarfate написал(а):
создай невидимое поле и ему дай id textar
проверь
проверь
Спустя 10 минут, 51 секунда (12.08.2010 - 17:27) phpnub написал(а):
Цитата (Lenarfate @ 12.08.2010 - 14:16) |
создай невидимое поле и ему дай id textar проверь |
Эм... не совсем понял, где мне создать невидимое поле? Если внутри textarea ещё один textarea то тоже не работает, т.к. оно в поле ввода появляется. А если просто ещё один textarea создать - работает, но смысл теряется...
Спустя 1 минута, 20 секунд (12.08.2010 - 17:28) Lenarfate написал(а):
<input type="hidden" id="textar">
Спустя 8 минут, 14 секунд (12.08.2010 - 17:36) phpnub написал(а):
Цитата (Lenarfate @ 12.08.2010 - 14:28) |
<input type="hidden" id="textar"> |
Всё равно не могу понять для чего нужен input, у меня ведь два скрипт посылают данные в textarea (первый - просто bbcode, второй - коды загруженных картинок) И одновременно они отказываются посылать данные в textare.
Спустя 7 минут, 49 секунд (12.08.2010 - 17:44) Lenarfate написал(а):
по идеи должно работать, как я говорил раньше, все сделать под один id. либо тут
замени на
textarea = document.getElementById('textar');
замени на
textarea = document.getElementsByTagName('text');
Спустя 47 минут, 10 секунд (12.08.2010 - 18:31) phpnub написал(а):
Цитата (Lenarfate @ 12.08.2010 - 14:44) |
по идеи должно работать, как я говорил раньше, все сделать под один id. либо тут
замени на
|
Так совсем перестало работать...
Спустя 2 минуты, 24 секунды (12.08.2010 - 18:34) Lenarfate написал(а):
извиняюсь. ошибся. вот так надо
textarea = document.getElementsByTagName('textarea');
Спустя 11 минут, 8 секунд (12.08.2010 - 18:45) phpnub написал(а):
Цитата (Lenarfate @ 12.08.2010 - 15:34) |
извиняюсь. ошибся. вот так надоtextarea = document.getElementsByTagName('textarea'); |
Попробовал так и всё равно не работает.