Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.javascript > #22784 > unrolled thread
| Started by | hipa <hipa@telenet.be> |
|---|---|
| First post | 2014-01-25 18:07 +0000 |
| Last post | 2014-01-26 17:58 +0100 |
| Articles | 4 — 2 participants |
Back to article view | Back to comp.lang.javascript
pass to function hipa <hipa@telenet.be> - 2014-01-25 18:07 +0000
Re: pass to function Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2014-01-25 19:24 +0100
Re: pass to function hipa <hipa@telenet.be> - 2014-01-26 15:31 +0000
Re: pass to function Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2014-01-26 17:58 +0100
| From | hipa <hipa@telenet.be> |
|---|---|
| Date | 2014-01-25 18:07 +0000 |
| Subject | pass to function |
| Message-ID | <lc0ugb$mqb$3@dont-email.me> |
Hi
I have a page with a dropdown list with value's from a db. When one item is selected a table with invoices changes.
I want to do the same if I put a value into a text field, but cannot get it to work. Something like:
<input type="text" onchange="getInvoices();" />. But how can I pass the entered value to the getInvoices() function?
This is the working code:
<select name="client_id" id="client_id" onchange="getInvoices();">
<option value="null" selected="selected"><?php echo $this->lang->line('invoice_all_clients');?></option>
<?php foreach($clientList->result() as $row): ?>
<option value="<?php echo $row->id;?>"><?php echo $row->name;?></option>
<?php endforeach; ?>
</select>
function getInvoices (elm) {
new Ajax.Request(base_url+'invoices/retrieveInvoices/', {postBody: Form.serialize($('filter')), onComplete: function(response) {
if (response.responseText != '') {
invoiceArray = eval('(' + response.responseText + ')');
$('invoiceListings').style.position = "relative";
$('invoiceListings').style.left = "0";
$('invoiceListings').style.visibility = "visible";
drawTable(invoiceArray);
} else {
$('invoiceListings').style.position = "absolute";
$('invoiceListings').style.left = "-5000px";
$('invoiceListings').style.visibility = "hidden";
}
}})
}
[toc] | [next] | [standalone]
| From | Thomas 'PointedEars' Lahn <PointedEars@web.de> |
|---|---|
| Date | 2014-01-25 19:24 +0100 |
| Message-ID | <13786118.rByXDuVpAv@PointedEars.de> |
| In reply to | #22784 |
hipa wrote:
> I have a page with a dropdown list with value's from a db. When one item
> is selected a table with invoices changes. I want to do the same if I put
> a value into a text field, but cannot get it to work.
That is not a problem description. Next time, show what you have tried, say
what you expected to happen and why, and what happened instead. And please
post using your real name.
> Something like:
> <input type="text" onchange="getInvoices();" />. But how can I pass the
> entered value to the getInvoices() function?
<input type="text" onchange="getInvoices(this)" />
> This is the working code:
>
> <select name="client_id" id="client_id" onchange="getInvoices();">
> […]
> function getInvoices (elm) {
Given the code above, you are either calling this function the wrong way or
the function does not make use of the “elm” argument. Your code is wrong
either way.
> invoiceArray = eval('(' + response.responseText + ')');
You might want to consider a wrapper that prefers
JSON.parse(response.responseText) before the comparably unsafe eval().
> $('invoiceListings').style.position = "relative";
> $('invoiceListings').style.left = "0";
var invoice_listings = $('invoiceListings');
invoice_listings.style.position = "relative";
invoice_listings.style.left = "0";
Better yet, avoid $('invoiceListings') and associated libraries in favor of
document.getElementById("invoiceListings") or something like that.
And finally, try replacing all of that with
invoice_listings.style.display = "";
> $('invoiceListings').style.position = "absolute";
>
$('invoiceListings').style.left = "-5000px";
>
$('invoiceListings').style.visibility = "hidden";
Try replacing that with
invoice_listings.style.display = "none";
NOTE: Elements where “display: none” are not subject to transition and
animation effects, while nowaways the “visibility” property can be animated.
But if you do not use those, using the “display” property is usually better.
Consider viewports that are wider than 5000px, for example. In fact, there
should be no good reason to move the element at all in order to hide it, if
you position it absolute and set its “visibility” property to “hidden”.
--
PointedEars
Twitter: @PointedEars2
Please do not Cc: me. / Bitte keine Kopien per E-Mail.
[toc] | [prev] | [next] | [standalone]
| From | hipa <hipa@telenet.be> |
|---|---|
| Date | 2014-01-26 15:31 +0000 |
| Message-ID | <lc39pe$uuo$1@dont-email.me> |
| In reply to | #22784 |
Hello
Thanks for the very fast reply!
> That is not a problem description. Next time, show what you have tried, say
> what you expected to happen and why, and what happened instead. And please
> post using your real name.
What I have tried is actually in my original post.
> <input type="text" onchange="getInvoices(this)" />
> Given the code above, you are either calling this function the wrong way or
> the function does not make use of the “elm” argument. Your code is wrong
> either way.
It's not my code actually, I'm experimenting with the CodeIgniter framework. I'm not an experienced developer, that's why I'm here :)
I've got it working like this.
<input type="text" name="client_id" id="client_id" onchange="getInvoices();" />
If I enter a numner in the input box and pres enter, the correspondent clients' invoices are shown in a table. The clients are in a db with a table clients.
Actually the javascript calls a php function (via Ajax.Request)
function retrieveInvoices()
{
$query = $this->invoices_model->getInvoicesAJAX ($this->input->post('status'), $this->input->post('client_id'), $this->input->post('clientcontact_id'), $this->settings_model->get_setting('days_payment_due'));
...
Where the getInvoicesAJAX() function has some mysql queries.
>> invoiceArray = eval('(' + response.responseText + ')');
>
> You might want to consider a wrapper that prefers
> JSON.parse(response.responseText) before the comparably unsafe eval().
>
>> $('invoiceListings').style.position = "relative";
>> $('invoiceListings').style.left = "0";
>
> var invoice_listings = $('invoiceListings');
> invoice_listings.style.position = "relative";
> invoice_listings.style.left = "0";
>
> Better yet, avoid $('invoiceListings') and associated libraries in favor of
> document.getElementById("invoiceListings") or something like that.
>
> And finally, try replacing all of that with
>
> invoice_listings.style.display = "";
>
>> $('invoiceListings').style.position = "absolute";
>>
> $('invoiceListings').style.left = "-5000px";
>>
> $('invoiceListings').style.visibility = "hidden";
>
> Try replacing that with
>
> invoice_listings.style.display = "none";
>
> NOTE: Elements where “display: none” are not subject to transition and
> animation effects, while nowaways the “visibility” property can be animated.
> But if you do not use those, using the “display” property is usually better.
>
> Consider viewports that are wider than 5000px, for example. In fact, there
> should be no good reason to move the element at all in order to hide it, if
> you position it absolute and set its “visibility” property to “hidden”.
Thanks, I'll take a look a this. Thanks for the tips.
[toc] | [prev] | [next] | [standalone]
| From | Thomas 'PointedEars' Lahn <PointedEars@web.de> |
|---|---|
| Date | 2014-01-26 17:58 +0100 |
| Message-ID | <1727724.sGAm6jVdEg@PointedEars.de> |
| In reply to | #22797 |
hipa wrote:
> Thanks for the very fast reply!
Thanks in advance for quoting properly next time.
[restored attribution]
> [Thomas 'PointedEars' Lahn wrote: ]
>> That is not a problem description. Next time, show what you have tried,
>> say what you expected to happen and why, and what happened instead. And
>> please post using your real name.
>
> What I have tried is actually in my original post.
I cannot see any attempts by you to solve your problem *there*. Also, you
have not posted what you expected, and what happened instead. And you are
still not using your real name.
>> <input type="text" onchange="getInvoices(this)" />
>
>> Given the code above, you are either calling this function the wrong way
>> or the function does not make use of the “elm” argument. Your code is
>> wrong either way.
This statement of mine does not refer to the code that you have quoted,
which is *my* code.
> It's not my code actually, I'm experimenting with the CodeIgniter
> framework. I'm not an experienced developer, that's why I'm here :)
This is not and cannot be JavaScript/DOM 101. You have to work with us to
solve your problem.
> I've got it working like this.
>
> <input type="text" name="client_id" id="client_id"
> onchange="getInvoices();" />
>
> If I enter a numner in the input box and pres enter, the correspondent
> clients' invoices are shown in a table. The clients are in a db with a
> table clients.
I see now that you are probably serializing the “form” element with name or
ID “filter” that you have not posted, too, for the HTTP request. Thus, the
request message body would probably look like
…&client_id=…&
if you gave the control this name. However, if you use the “onchange”
event-handler attribute, the request will be made regardless whether the
user intended the change when the control loses focus (for example, it will
be made if the user types something and then decides to quit the browser
session, which could lead to errors). As a result, such functionality
should be triggered by another control, usually a submit button, instead.
The “onsubmit” event-handler attribute of the “form” element can be used
then instead.
> Actually the javascript calls a php function (via Ajax.Request)
Mostly irrelevant, except for
> […] $this->input->post('client_id') […]
… which must retrieve the value from the parse result of the request message
body with this particular framework.
--
PointedEars
Twitter: @PointedEars2
Please do not Cc: me. / Bitte keine Kopien per E-Mail.
[toc] | [prev] | [standalone]
Back to top | Article view | comp.lang.javascript
csiph-web