2013-05-02 9 views
0

Hie: Мне удалось отобразить несколько Divs, используя оператор foreach в php (divs показывают разные строки из базы данных), и каждый из этих Divs имеет форму внизу, кнопка которой вызывает функцию javascript onclick ниже.Передача идентификатора тега от php до javascript

function SubmitForm(msg) { 
var cid = $("#cid").val(); 
var message = $("#"+msg).val(); 

$.post(
"picturecomments.php", { cid: cid, message: message }, function(data)  
{alert(data);} 
); 
} 

и ниже форма

<form action="picturecomments.php" method="post"> 
<span > 
<input type="hidden" name="cid" id="cid" value="',$result['id'],'"required="required"/> 
<textarea name="'.$message.'" id="'.$message.'" style="width:85%; height:25px; 
margin:0px;" placeholder="give a comment" required="required"></textarea> 
<input type="button" onclick="SubmitForm('.$message.');" 
id="searchForm"style="width:5%; height:25px; margin:0px;" value="Send"/> 
</span> 
</form> 

моя проблема, когда я пытаюсь нажать на кнопку отправить, она всегда прислушивается к первому DIV, так я заметил, что проблема, потому что я имеют только один ID ДЛЯ ЭТИХ ТЕГОВ И КОГДА СЦЕНАРИЙ РАБОТАЕТ, ЭТО НАЙДЕТ ТОЛЬКО ПЕРВЫЙ идентификатор ...

Как заставить функцию запускать несколько идентификаторов? потому что, когда у меня есть 2 див, функция будет слушать только к первой форме представить

переменных $ сообщения в том же коде PHP, я сделал мое исследование, но я не в состоянии найти решение

ПОЖАЛУЙСТА ПОМОГИ!!

+5

ли все они имеют один и тот же идентификатор? Идентификатор должен быть уникальным. – jah

+0

Отправить идентификатор, а также сообщение SubForm? SubmitForm ('. $ Result ["id"].', '. $ Message.'); – shapeshifter

+1

Вместо этого вы должны использовать классы, так как они могут применяться к нескольким элементам. И затем вместо этого используйте jquerys, как в ответе Бенджамина – jah

ответ

0

Вы можете использовать jquery каждый. при условии, что у вас есть несколько дивы, которые имеют класс «пост»

<div class="post"> 
    <input type="text" class="cid"> 
    <textarea class="msg"></textarea> 
</div> 
<div class="post"> 
    <input type="text" class="cid"> 
    <textarea class="msg"></textarea> 
</div> 


$(".post").each(function(index) { 
    $.post("picturecomments.php", { cid: $(this).find('cid').val(), message: $(this).find('textarea').val() }, function(data) { 
     alert(data); 
    }); 
}); 

Так это будет в основном перебрать все дивы, который имеет класс пост. Найдите поле ввода с классом = "cid"/class = "msg", а затем отправьте его на ваш php-процессор.

Конечно, это довольно простой, но вы сможете выйти из него!

http://api.jquery.com/each/

КСТАТИ: убедитесь, что вы не используете идентификаторы. Они должны быть уникальными!

+0

Спасибо, я исправил класс? id issue .., но при нажатии кнопки отправки я получаю предупреждения, равные количеству доступных Divs .. говоря, что в текстовой области ничего нет ... даже если я набираю их все! – Jay

+0

Jep, я заметил. Я редактировал код. сообщение shoul будет $ (this) .find ('textarea'). val() Мое плохое, извините! –

0

Вам вообще не нужно использовать идентификаторы, вы можете просто использовать имена в каждой форме и сериализовать их.

Я бы также удалил встроенный javascript (и css ...) и жестко закодированный $message, так как вы никогда не сможете изменить исходное сообщение, если вы так выразились.

Также нет причин использовать другой атрибут name для сообщения в каждой форме.

Вам также необходимо предотвратить отправку формы по умолчанию/нормального html.

PHP/HTML

<form action="picturecomments.php" method="post"> 
    <span > 
    <input type="hidden" name="cid" value="' . htmlspecialchars($result['id']) . '" required="required"/> 
    <textarea name="message" placeholder="give a comment" required="required"></textarea> 
    <input type="button" value="Send"/> 
    </span> 
</form> 

JavaScript:

$("form").on("submit", function(e) { 
    e.preventDefault(); 
    $.post(
    "picturecomments.php", 
    $(this).serialize(), 
    function(data) { 
     alert(data); 
    }); 
} 
+0

Ничего не происходит, когда я нажимаю кнопку «Отправить», и я предполагаю, что он не смог вызвать код javascript ... поэтому я взял приведенный выше код и поместил его в названную функцию javascript, которую я затем поместил в onclick тег кнопок. но ничего не происходит – Jay

+0

@EmmanuelMatsiyana Какую версию jQuery вы используете? jQuery 'on()' был добавлен в версии 1.7. – jeroen

Смежные вопросы