ورود

View Full Version : فضاي خالي در textfield حذف نمي شود..



searchman
دوشنبه 25 آبان 1388, 10:06 صبح
باسلام
من يك textfield به نام date_input دارم:

var TheData='<h3>گزارش كار</h3><br><br><table><tr><td><input type="checkbox" onclick="'+
'if(this.checked == true)'+
'document.getElementById(\'date\').style.visibilit y=\'visible\';'+
'if(this.checked == false)'+
'document.getElementById(\'date\').style.visibilit y=\'hidden\';" id="boxmission" />ماموريت </td>'+
'<td><div id="date" >'+
'<input id= "date_input" name="date_input" type="text" dir="ltr"/>';كه مي خواهم value اون رو به اين ترتيب با تابع trim حذف كنم:

var value=document.getElementById('date_input').value;
value=Trim(value);تابع trim درست عمل مي كنه ولي جهت اطمينان:

function LTrim(str)
{
var whitespace = new String(" \t\n\r\f");

var s = new String(str);

if (whitespace.indexOf(s.charAt(0)) != -1) {
// We have a string with leading blank(s)...

var j=0, i = s.length;

// Iterate from the far left of string until we
// don't have any more whitespace...
while (j < i && whitespace.indexOf(s.charAt(j)) != -1)
j++;


// Get the substring from the first non-whitespace
// character to the end of the string...
s = s.substring(j, i);
}

return s;
}

// --------------------------------------------------------------------------
// Remove trailing blanks from our string.

// I str - the string we want to RTrim
// Return the input string without any trailing whitespace

// Date 03 avr. 2003 23:13:50
// Author Aurélien Tisné (CS)
// --------------------------------------------------------------------------
function RTrim(str)
{
// We don't want to trip JUST spaces, but also tabs,
// line feeds, etc. Add anything else you want to
// "trim" here in Whitespace
var whitespace = new String(" \t\n\r");

var s = new String(str);

if (whitespace.indexOf(s.charAt(s.length-1)) != -1) {
// We have a string with trailing blank(s)...

var i = s.length - 1; // Get length of string

// Iterate from the far right of string until we
// don't have any more whitespace...
while (i >= 0 && whitespace.indexOf(s.charAt(i)) != -1)
i--;


// Get the substring from the front of the string to
// where the last non-whitespace character is...
s = s.substring(0, i+1);
}

return s;
}


// --------------------------------------------------------------------------
// Remove trailing and leading blanks from our string.

// I str - the string we want to Trim
// Return the trimmed input string

// Date 03 avr. 2003 23:15:09
// Author Aurélien Tisné (CS)
// --------------------------------------------------------------------------
function Trim(str)
{
return RTrim(LTrim(str));
}با اين وجود فضاي اطراف value همچنان وجود داره.:عصبانی++:
خيلي فوري
ممنون از راهنماييتون

mehdi.mousavi
دوشنبه 25 آبان 1388, 10:36 صبح
باسلام من يك textfield به نام date_input دارم كه مي خواهم value اون رو به اين ترتيب با تابع trim حذف كنم:


سلام.
اگر از jQuery استفاده می کنید، میتونید از $.trim() استفاده کنید. اگر نه، راه خیلی بهتر استفاده از Regular Expression ها برای اینکاره تا این کدی که شما نوشتید:


String.prototype.trim = function() {
return this.replace(/^\s+|\s+$/g, '');
}
String.prototype.ltrim = function() {
return this.replace(/^\s+/, '');
}
String.prototype.rtrim = function() {
return this.replace(/\s+$/, '');
}


بعدش هم موقع استفاده، خیلی راحت می تونید اینطوری عمل کنید:

var sampleString = " test ";
alert(sampleString.trim());


موفق باشید.

searchman
دوشنبه 25 آبان 1388, 13:03 عصر
ممنون آقا مهدي
اما الان متوجه شدم كه دقيقا مشكل از كجاست.
محتوي اين textfield از سرور فرستاده مي شه (با Ajax كار مي كنم) و يك فضاي خالي به ابتداي ديتا اضافه مي كنه كه نه استفاده از Regular Expression ها و نه هر تابع مشابه ديگه اي اون رو پاك نمي كنه(سمت سرور اين فاصله وجود نداره) .
چجوري مي شه پاكش كرد؟

mehdi.mousavi
دوشنبه 25 آبان 1388, 13:18 عصر
ممنون آقا مهدي اما الان متوجه شدم كه دقيقا مشكل از كجاست.
محتوي اين textfield از سرور فرستاده مي شه (با Ajax كار مي كنم) و يك فضاي خالي به ابتداي ديتا اضافه مي كنه كه نه استفاده از Regular Expression ها و نه هر تابع مشابه ديگه اي اون رو پاك نمي كنه(سمت سرور اين فاصله وجود نداره) . چجوري مي شه پاكش كرد؟

سلام.
متوجه نمیشم. یعنی وقتی Data رو میگیرید (سمت سرور) فاصله وجود داره و "Data + فاصله" به سمت Client ارسال میشه؟ اگر اینطوری هستش که خوب، سمت سرور میتونید این فاصله رو از بین ببرید. اگر این داده از بانک در میاد، میتونید تو Query مربوطه اینکارو انجام بدید (البته توصیه می کنم این کارو نکنید). روش بهتر این هستش که هنگام ورود اطلاعات و قبل از ذخیره، مطمئن بشید (سمت سرور) که فاصله اضافی در داده وجود ندارد. به این ترتیب، داده سالم به بانک افزوده خواهد شد و هنگام Query هم مشکلی نخواهید داشت.

در هر حال، وقتی داده با استفاده از Ajax از سرور گرفته شد (به فرض اینکه حتی داده + فاصله از سرور گرفته بشه)، شما براحتی میتونید با توابعی که ذکر کردم هنگام PageLoad صفحه، (سمت Client)، فاصله مزبور رو از بین ببرید و value اون textbox رو تغییر بدید. اما ارجحیت با این هستش که هنگام ذخیره داده اجازه ذخیره فاصله اضافی داده نشه.

موفق باشید.

searchman
دوشنبه 25 آبان 1388, 13:52 عصر
ممنون از وقتي كه مي گذاريد

(سمت سرور اين فاصله وجود نداره) .
چجوري مي شه پاكش كرد؟
بله ديتا از بانك مياد ولي بدون هيچ كاراكتر اضافه اي اما پس از ارسال سمت كلاينت (همراه اين داده يك سري داده ديگه هم منتقل مي شه به صورت رشته كه سمت كلاينت جدا مي شن )چند سطر خالي در ابتداي داده ديده ميشه كه همونطور كه گفتم هيچ جوري نمي تونم پاكش كنم

mehdi.mousavi
دوشنبه 25 آبان 1388, 13:54 عصر
ممنون از وقتي كه مي گذاريد بله ديتا از بانك مياد ولي بدون هيچ كاراكتر اضافه اي اما پس از ارسال سمت كلاينت (همراه اين داده يك سري داده ديگه هم منتقل مي شه به صورت رشته كه سمت كلاينت جدا مي شن )چند سطر خالي هم ديده ميشه كه همونطور كه گفتم هيچ جوري نمي تونم پاكش كنم


لطفا کد بخش مربوطه رو اینجا ارسال کنید تا مشکلتون رو حل کنم.

searchman
دوشنبه 25 آبان 1388, 14:17 عصر
كد هاي ajax كه فكر نمي كنم مشكلي داشته باشن:

function GetXmlHttpRequest()
{
var XmlHttpReq;

var msxmlhttp = new Array(
'Msxml2.XMLHTTP.5.0',
'Msxml2.XMLHTTP.4.0',
'Msxml2.XMLHTTP.3.0',
'Msxml2.XMLHTTP',
'Microsoft.XMLHTTP');
for (var i = 0; i != msxmlhttp.length; i++)
{
try {
XmlHttpReq = new ActiveXObject(msxmlhttp[i]); //For IE
} catch (e) {
XmlHttpReq = null;
}
}

if(!XmlHttpReq )
XmlHttpReq = new XMLHttpRequest();//For NS

return XmlHttpReq;



}
function PostData(Data, Url)
{

var XmlHttpReq = GetXmlHttpRequest();

if(!XmlHttpReq)
{
alert('Your Browser not support AJAX!');
return false;
}

XmlHttpReq.open("POST", Url, true);

XmlHttpReq.onreadystatechange = function()
{
if(XmlHttpReq.readyState == 4 && XmlHttpReq.status == 200)


PrintResult(XmlHttpReq.responseText);

};

XmlHttpReq.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
XmlHttpReq.send(Data);

return true;

}

/* ---------------------------------------------------------------------------- */

function PrintResult(TheData)
{
TheData=TheData.trim();


var values=TheData.split('|');
if(values.length !=0 )
{//if3-2
var bounds=values[0].split(';');
if(bounds.length !=0 )
{//if3-3
var date_input=bounds[0];
document.getElementById('date_input').value=date_i nput;

}//if3-3
}//if3-2


}//funكه ديتا دريافت مي شه و اگه لازمه بگيد كد هاي سمت سرور رو هم بگزارم

mehdi.mousavi
دوشنبه 25 آبان 1388, 15:32 عصر
كد هاي ajax كه فكر نمي كنم مشكلي داشته باشن]كه ديتا دريافت مي شه و اگه لازمه بگيد كد هاي سمت سرور رو هم بگزارم

سلام.
این کد رو اگر چند سال پیش میدیدم، زیاد تعجب نمیکردم، اما الان، همه چیز عوض شده و دیگه نیاز به اینهمه پیچیدگی و نوشتن کدهای error-prone نیست. بهتون جدا توصیه می کنم که با یکی از framework های موجود اقدام به اینکار کنید. کدی که شما نوشتید امروزه قابل قبول نیست!!!

در هر حال، بعد از split کردن، لطفا داده رو trim کنید و ببینید آیا مشکل رفع میشه یا خیر:

var date_input=bounds[0].trim();

(با توجه به توابعی که قبلا براتون ارسال کردم).

searchman
دوشنبه 25 آبان 1388, 18:12 عصر
سلام

این کد رو اگر چند سال پیش میدیدم، زیاد تعجب نمیکردم
آقا زياد تعجب نكنيد ما خودمون هم مال اون سال ها هستيم:لبخندساده:

همه چیز عوض شده و دیگه نیاز به اینهمه پیچیدگی و نوشتن کدهای error-prone نیست
بابا ما اينجا كلي كد رو تعديل كرديم تا بشه ازش سر در اورد!
در هر صورت خيلي ممنون از توصيتون. اما با trim دوباره هم جواب نميده و همچنان اون فاصله وجود داره من حتي سمت سرور(PHP هست) هم رشته خروجي رو trim مي كنم ولي ضاهرا مشكل از جاي ديگري.
بلاخره من با ترفندي داده رو از اون فاصله جدا كردم ولي برام خيلي جالب مشكل از كجاست.
باز هم ممنون