[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Конфликт двух getElementById
phpnub
Здравствуйте, не получается подружить два скрипта на java. По отдельности они работаю, а вот вместе никак, а знаний, чтобы исправить недостаточно.
Есть некая форма для постинга новостей, вот её код:

<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;
window.onload = function() {
textarea = document.getElementById('textar');


вот тут 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. либо тут

textarea = document.getElementById('textar');

замени на

textarea = document.getElementsByTagName('text');

Так совсем перестало работать...

Спустя 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');

Попробовал так и всё равно не работает.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.