PDA

View Full Version : سوال: عوض شدن محتويات text area



numberone1
جمعه 05 اسفند 1390, 22:35 عصر
سلام
يه فرم دارم كه يك ليست باكس توش هست 3 تا گزينه داره ميخوام بر اساس هر كدوم از اون 3 تا يك نوشته جداگانه توي text area چاپ بشه
با ajax يا jquery اگر ميشه كمكم كنيد اينو درست كنم
خيلي باهاش ور رفتم نتونستم درست كنم. توي گوگل هم خيلي سرچ كردم ولي چيزي شبيه ايني كه من ميخوام پيدا نشد
ممنون
اينارو خودم نوشتم ولي نشد:ناراحت:


<select class="field size3" onchange="showUser(this.value)" >
<option value="0">مدیریت سایت</option>
<option value="1">روابط عمومی سایت</option>
<option value="2">مدیریت بخش مالی</option>
</select>
<textarea class="field size1" rows="10" cols="30" id="txtHint">

</textarea>


اينم js

<script type="text/javascript">
function showUser(str)
{
if (str=="")
{
document.getElementById("txtHint").innerHTML="";
return;
}
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementById("txtHint").innerHTML=xmlhttp.responseText;
}
}
xmlhttp.open("GET","index.php?a="+str,true);
xmlhttp.send();
}
</script>

farhadfery
جمعه 05 اسفند 1390, 22:45 عصر
عزیز , اگر فقط همیناین 3 جمله که قرار است در textArea بخوره،.به نظر من نیاز به ajax نیست! این 3 تا جمله را در یک آرایه js بریز. (هنگام رندر شدن صفحه). و روی خداد onchange آن ComboBox عنصر مناسب آرایه را در TextArea قرار بده. من خودم همینکار را در مواردی که گزینه ها کم و با متن کوتاه هستندانجام می دهم. نمی شه گفت Ajax همیشه سرعت را بالا می بره.
اگر Ajax کنی، کاربر با 4 بار چنج گزینه ComboBox شما 4 بار درخواست ارسال کرده اید.!

numberone1
جمعه 05 اسفند 1390, 22:56 عصر
عزیز , اگر فقط همیناین 3 جمله که قرار است در textArea بخوره،.به نظر من نیاز به ajax نیست! این 3 تا جمله را در یک آرایه js بریز. (هنگام رندر شدن صفحه). و روی خداد onchange آن ComboBox عنصر مناسب آرایه را در TextArea قرار بده. من خودم همینکار را در مواردی که گزینه ها کم و با متن کوتاه هستندانجام می دهم. نمی شه گفت Ajax همیشه سرعت را بالا می بره.
اگر Ajax کنی، کاربر با 4 بار چنج گزینه ComboBox شما 4 بار درخواست ارسال کرده اید.!
روشي رو فرمودين بلد بودم منتها متني كه قصد چاپ كردم محتويات ارسالي ايميل هست كه از ديتا بيس خونده ميشه به اضافه كد هاي html و هدر هاي ارسالي ست شده
اگر ممكنه براي نوشتن ajax كمك كنيد
ممنون

numberone1
شنبه 06 اسفند 1390, 00:04 صبح
كاش يكي هم به اين تاپيك جواب ميداد

MMSHFE
شنبه 06 اسفند 1390, 08:50 صبح
عزیز دل، یکم صبور باشین. این کد HTML رو ببینید:


<!doctype html>
<html>
<head>
<title>jQuery AJAX DEMO</title>
<meta charset="utf-8"/>
<script src="jqmin.js" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function() {
$("#type").change(function() {
$.ajax({
type: "get",
url: "contents.php",
data: "type="+$(this).val(),
success: function(data) {
$("#txtHint").html(data);
}
});
});
});
</script>
<body>
<select id="type">
<option value="0">مدیریت سایت</option>
<option value="1">روابط عمومی سایت</option>
<option value="2">مدیریت بخش مالی</option>
</select><br/>
<textarea cols="30" id="txtHint" rows="10"></textarea>
</body>
</html>

همونطور که ملاحظه میکنید، از jQuery برای درخواست فایل contents.php در زمان تغییر select و همزمان، ارسال مقدار انتخاب شده برای صفحه مذکور به روش GET استفاده شده و بعد از دریافت داده های خروجی اون اسکریپت، محتویات داخل تگ textarea با خروجی مذکور جایگزین میشه. اما ببینیم اسکریپت contents.php چکار میکنه؟


<?php
if(!(isset($_GET['type']) && is_numeric($_GET['type']))) {
exit();
}
$type = (int) $_GET['type'];
mysql_connect('localhost', 'root', '') or die();
mysql_select_db('dbname') or die();
mysql_query('SET NAMES \'utf8\'');
$content = mysql_query("SELECT * FROM `contents` WHERE (`type`='{$type}') ORDER BY `id` LIMIT 1");
if($content && mysql_num_rows($content) == 1) {
$content = mysql_fetch_assoc($content);
echo $content['text'];
}
?>

اینجا هم ملاحظه میکنید که type دریافت شده به روش GET مورد استفاده قرار میگیره و مطلب مذکور از دیتابیس استخراج میشه و محتویات مربوطه با دستور echo بعنوان خروجی ارسال میشه.
اگه سؤالی بود در خدمتم. موفق باشید.

numberone1
شنبه 06 اسفند 1390, 22:29 عصر
ممنون از توضيحات جامع تون
ولي متاسفانه كد كار نميكنه. هيچي توي كادر چاپ نميشه

<script src="http://www.domain.com/js/jquery.min.js" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function() {
$("#type").change(function() {
$.ajax({
type: "get",
url: "index.php",
data: "type="+$(this).val(),
success: function(data) {
$("#txtHint").html(data);
}
});
});
});
</script>




<div class="form">
<p>

<label>موضوع پیام</label>
<input type="text" name="text" class="field size1" />
</p>
<p>

<label>نام نويسنده</label>
<input type="text" name="text1" class="field size1" />
</p>
<p class="inline-field">

<label>فرستنده پیام</label>
<select class="field size3" id="type">
<option value="0">مدیریت سایت</option>
<option value="1">روابط عمومی سایت</option>
<option value="2">مدیریت بخش مالی</option>
</select>

</p>

<p>

<label>متن پیام</label>
<textarea class="field size1" rows="10" cols="30" id="txtHint" name="text2">

</textarea>
</p>


if(!(isset($_GET['type']) && is_numeric($_GET['type']))) {
exit();
}
$type = (int) $_GET['type'];
if($type == 0){echo 'email 1';}
if($type == 1){echo 'email 2';}
if($type == 2){echo 'email 3';}


كل كد ها داخل فايل index قرار داره

MMSHFE
یک شنبه 07 اسفند 1390, 13:46 عصر
خوب عزیز نباید کار کنه دیگه. اگه دقت کنید کد آخر رو من گفتم توی فایل contents.php باید قرار بدین. نمیشه که یک فایل، خودش رو با AJAX فراخوانی کنه. اینطوری توی یک حلقه تو در تو با عمق بینهایت گرفتار میشین چون هر فایل که فراخوانی میشه، دوباره خودش رو فراخوانی میکنه و الی آخر. باید فایل index.php شما که کدهای HTML و jQuery توش قرار داره، فایل contents.php رو صدا بزنه و گزینه انتخاب شده رو براش بفرسته و اون فایل هم برحسب گزینه ارسال شده، خروجی لازم رو تولید کنه. درنتیجه کدی که گذاشتین درسته، فقط باید قطعه کد آخر رو توی فایل جداگانه ای بنام contents.php ذخیره کنید.
موفق باشید.