This is a migrated thread and some comments may be shown as answers.

Javascript txtbox.value='sometxt' doesn't refresh display

14 Answers 344 Views
Input
This is a migrated thread and some comments may be shown as answers.
CSurieux
Top achievements
Rank 2
CSurieux asked on 02 Dec 2009, 05:35 PM
Hello,

I have a TextBox which could be a RadTextBox or an asp:TextBox.
When it is a RadTextBox and I set it's value on clientside using myBox.value="newtext", the value is not refreshed on display.
How to force redraw independently of he fact it is rad or not.

Thank you fr help.
CS

14 Answers, 1 is accepted

Sort by
0
Schlurk
Top achievements
Rank 2
answered on 02 Dec 2009, 08:11 PM
For the RadTextBox I believe the get_value and set_value client-side functions are the way to go. You can find more information on each RadInput type and their client-side objects in this documentation article.
0
CSurieux
Top achievements
Rank 2
answered on 03 Dec 2009, 08:38 AM
Hi,

Thanks but if it is a normal textbox ? is set_value working ?

CS
0
Dimo
Telerik team
answered on 03 Dec 2009, 09:00 AM
No. You should use set_value() for RadTextBox and .value for asp:TextBox.

Regards,
Dimo
the Telerik team

Instantly find answers to your questions on the new Telerik Support Portal.
Watch a video on how to optimize your support resource searches and check out more tips on the blogs.
0
CSurieux
Top achievements
Rank 2
answered on 03 Dec 2009, 10:01 AM
Hello Dimo,
Sure but how to identify a RadTextBox or a normal TextBox on the client ?
That's all my original question.

Something like

if ( mytextBox.set_value)
    mytextBox.set_value(newval);
else mytextBox.vale=newval;


Regards
CS
0
Shinu
Top achievements
Rank 2
answered on 03 Dec 2009, 11:10 AM
Hi Christia,

Try the following approach in order to differentiate between Telerik textbox and ASP.NET textbox.

JavaScript:
 
<script type="text/javascript"
    function getControl(textboxID) { 
        var text = $find(textboxID); 
        if (text == null) { 
            alert("standard textbox"); 
        } 
        else { 
            alert("Telerik"); 
        }         
    } 
</script> 

-Shinu.
0
CSurieux
Top achievements
Rank 2
answered on 03 Dec 2009, 11:57 AM
Hi Shin,

I don't think that will work, asp:TextBox will result as Telerik...

CS
0
Dimo
Telerik team
answered on 03 Dec 2009, 02:54 PM
Christian,

Your question makes me believe that you have neglected to familiarize yourself with the RadTextBox HTML rendering. If this is the case, then use the provided documentation...

http://www.telerik.com/help/aspnet-ajax/input_appearancecssfile.html
(setion 2 - Layout of the input control)

... or any web inspector such as Firebug.

There is no "correct" or "recommended" way to accomplish your task. Use your common sense and basic knowledge of HTML and Javascript operations with DOM properties. There are some easily noticable patterns that you can use to distinguish between the RadTextBoxes and asp:TextBoxes - both types of controls contain <input> elements, but everything else is different - HTML structure, CSS classes, inline styles and client ID patterns.


Dimo
the Telerik team

Instantly find answers to your questions on the new Telerik Support Portal.
Watch a video on how to optimize your support resource searches and check out more tips on the blogs.
0
CSurieux
Top achievements
Rank 2
answered on 03 Dec 2009, 03:14 PM
Hello Dimo,

My previous answer seems to have disappeared, may by blocked by some word checker.
In case it doesn't reach the forum, I was just saying usually I get fast and concise answer on your forums.
May be I neglected reading the full doc but I don't neglected paying the license fees.
Is sending back users to long documentation the task of support  in each case ?
I am not a javascript addict, I suppose you don't know each computer language ?

Regards
CS
0
CSurieux
Top achievements
Rank 2
answered on 03 Dec 2009, 04:01 PM
Dimo,

Even reading your documentation I still don't understand how I could differentiate an asp:texbox from a rad:texbox in javascript.
I did lot of search on forums and in hlp file and still nothing.

Thanks for a real help if available
CS
0
Dimo
Telerik team
answered on 04 Dec 2009, 08:37 AM
Hello Christian,

OK, here is how to do it.

The HTML rendering of RadTextBox basically consists of several <input> elements wrapped in a container. You need to isolate the textbox, which carries the RadTextBox client control instance and skip the others. If an <input> element is neither of the three RadTextBox <input> element types, and is not a checkbox/radio button, etc., then it is an asp:TextBox.

<span>
<input type="text" class="riTextBox riEnabled" id="RadTextBox1_text" />
<input type="text" id="RadTextBox1" style="visibility:hidden;width:1px;height:1px"  />
<input type="hidden" id="RadTextBox1_ClientState" />
</span>

There is one more RadTextBox rendering mode, which uses a <div> and a <table> instead of a <span>, but in that case the logic is the same and I will review only the above scenario for simplicity.


Let me know if there is anything unclear.

By the way, I am eager to know the following things, so please tell me:

1. Why do you use asp:TextBoxes and RadTextBoxes at the same time?
2. What is this scenario in which are setting values to a number of controls, and you have a collection of "something", but you don't have enough information about this "something" beforehand?


<%@ Page Language="C#" %>
<%@ Register Assembly="Telerik.Web.UI" Namespace="Telerik.Web.UI" TagPrefix="telerik" %>
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 
<head runat="server">
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
<title>RadControls for ASP.NET AJAX</title>
</head>
<body>
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server" />
 
<h1>Set values to random textboxes</h1>
 
Value: <asp:TextBox ID="ValueTB" runat="server" />
<asp:Button ID="Button1" runat="server" Text="Set" OnClientClick="return setValues()" />
 
<script type="text/javascript">
 
function setValues()
{
    setUsingIDs();
    setUsingDOM();
     
    return false;
}
 
</script>
 
<h2>Using IDs</h2>
 
<p>This approach assumes that you have a collection of control IDs</p>
 
asp:TextBox 1 <asp:TextBox ID="TextBox1" runat="server" />
<br /><br />
RadTextBox 1 <telerik:RadTextBox ID="RadTextBox1" runat="server" />
<br /><br />
asp:TextBox 2 <asp:TextBox ID="TextBox2" runat="server" />
<br /><br />
RadTextBox 2 <telerik:RadTextBox ID="RadTextBox2" runat="server" />
 
<telerik:RadCodeBlock ID="RadCodeBlock1" runat="server">
<script type="text/javascript">
 
function setUsingIDs()
{
    var tbValue = $get("<%= ValueTB.ClientID %>").value;
     
    var IDs = new Array(
        "<%= TextBox1.ClientID %>",
        "<%= RadTextBox1.ClientID %>",
        "<%= TextBox2.ClientID %>",
        "<%= RadTextBox2.ClientID %>"
    );
     
    for (var j = 0; j < IDs.length; j++)
    {
        var cci = $find(IDs[j]);
        // check whether there is a Telerik textbox instance attached to this ID
        // the type name check is generally not necessary if the ID collection is valid and contains only texbox control IDs
        if (cci != null && Object.getType(cci).getBaseType().getName() == "Telerik.Web.UI.RadInputControl")
        {
            cci.set_value(tbValue);
            continue;
        }
         
        // the ID is of an asp:TextBox
        $get(IDs[j]).value = tbValue;
    }
}
 
</script>
</telerik:RadCodeBlock>
 
<h2>Using DOM elements</h2>
 
<p>This approach assumes that you have a collection of <input> elements</p>
 
<asp:Panel ID="Panel1" runat="server">
asp:TextBox 3 <asp:TextBox ID="TextBox3" runat="server" />
<br /><br />
RadTextBox 3 <telerik:RadTextBox ID="RadTextBox3" runat="server" />
<br /><br />
asp:TextBox 4 <asp:TextBox ID="TextBox4" runat="server" />
<br /><br />
RadTextBox 4 <telerik:RadTextBox ID="RadTextBox4" runat="server" />
</asp:Panel>
 
<telerik:RadCodeBlock ID="RadCodeBlock2" runat="server">
<script type="text/javascript">
 
function setUsingDOM()
{
    var tbValue = $get("<%= ValueTB.ClientID %>").value;
     
    var inputs = $get("<%= Panel1.ClientID %>").getElementsByTagName("INPUT");
     
    for (var j = 0; j < inputs.length; j++)
    {
        // skip checkboxes, radiobuttons, etc.
        if (!inputs[j].type || inputs[j].type != "text")
            continue;
 
        // skip RadTextBox visible input elements
        if (
            inputs[j].id != "" &&
            inputs[j].id.indexOf("_text") == inputs[j].id.length - 5 &&
            $find(inputs[j].id.replace("_text", "")) != null
        )
        {
            continue;
        }
         
        // check whether the textbox is a RadTextBox hidden input element, because
        // the RadTextBox client control instances are attached to these hidden input elements
        if (inputs[j].id != "" && $get(inputs[j].id + "_text") != null && inputs[j].style.visibility == "hidden")
        {
            // if true, then we should set the value using the RadTextBox API
            var rtb = $find(inputs[j].id);
            if (rtb)
            {
                rtb.set_value(tbValue);
                continue;
            }
        }
         
        // the input element is an asp:TextBox
        inputs[j].value = tbValue;
    }
}
 
</script>
</telerik:RadCodeBlock>
 
</form>
</body>
</html>



Regards,
Dimo
the Telerik team

Instantly find answers to your questions on the new Telerik Support Portal.
Watch a video on how to optimize your support resource searches and check out more tips on the blogs.
0
CSurieux
Top achievements
Rank 2
answered on 04 Dec 2009, 08:49 AM
Hello Dimo,

The page is created by a sub assembly with a config switch : UseTelerik=true/false.

Concerning your detailled answer, thanks.
I just discovered I was using $get and that it was not working with Telerik.
Then I discovered that testing if (myFindTextBox.set_value) could be ok to differntiate asp and telerik TextBox.
Is it true and does it works for each browser.

Regards
CS
0
Dimo
Telerik team
answered on 04 Dec 2009, 09:42 AM
>> Then I discovered that testing if (myFindTextBox.set_value) could be ok to differntiate asp and telerik TextBox. Is it true and does it works for each browser.

Technically, yes, but if myFindTextBox.set_value is defined as a function, this means that myFindTextBox is a client control instance. This very fact means that myFindTextBox is NOT an asp:TextBox, because they don't have client control instances. So no need to check further for set_value.


Dimo
the Telerik team

Instantly find answers to your questions on the new Telerik Support Portal.
Watch a video on how to optimize your support resource searches and check out more tips on the blogs.
0
Dimo
Telerik team
answered on 04 Dec 2009, 09:45 AM
P.S.

In addition, the example I provided you is too complex for your scenario, because as far as I understand, you are NOT using both types of textboxes at the same time. Since you can find that on the server, then you can send some property to the client, so that the Javascript code is a lot simpler and without that many checks.
0
CSurieux
Top achievements
Rank 2
answered on 04 Dec 2009, 09:56 AM
Thanks Dimo,

The if ( myTb.set_value) is Ok for me.
Concerning serverside, I have no easy way to set a flag somewhere.

Regards
CS
Tags
Input
Asked by
CSurieux
Top achievements
Rank 2
Answers by
Schlurk
Top achievements
Rank 2
CSurieux
Top achievements
Rank 2
Dimo
Telerik team
Shinu
Top achievements
Rank 2
Share this question
or