Message from discussion
Tactical Advice: Many rows, one checkbox per row
Received: by 10.216.139.87 with SMTP id b65mr482727wej.11.1335507078442;
Thu, 26 Apr 2012 23:11:18 -0700 (PDT)
X-BeenThere: prototype-scriptaculous@googlegroups.com
Received: by 10.180.76.202 with SMTP id m10ls237746wiw.1.canary; Thu, 26 Apr
2012 23:11:09 -0700 (PDT)
Received: by 10.180.105.71 with SMTP id gk7mr151510wib.0.1335507069950;
Thu, 26 Apr 2012 23:11:09 -0700 (PDT)
Received: by 10.180.105.71 with SMTP id gk7mr151509wib.0.1335507069916;
Thu, 26 Apr 2012 23:11:09 -0700 (PDT)
Return-Path: <woj...@studioatrium.pl>
Received: from mail.studioatrium.pl (mail.studioatrium.pl. [213.5.249.13])
by gmr-mx.google.com with ESMTP id w8si421126wiv.3.2012.04.26.23.11.09;
Thu, 26 Apr 2012 23:11:09 -0700 (PDT)
Received-SPF: pass (google.com: best guess record for domain of woj...@studioatrium.pl designates 213.5.249.13 as permitted sender) client-ip=213.5.249.13;
Authentication-Results: gmr-mx.google.com; spf=pass (google.com: best guess record for domain of woj...@studioatrium.pl designates 213.5.249.13 as permitted sender) smtp.mail=woj...@studioatrium.pl
Received: from localhost (mail.studioatrium.pl [127.0.0.1])
by mail.studioatrium.pl (Postfix) with ESMTP id 85DEE17601BC;
Fri, 27 Apr 2012 09:19:15 +0200 (CEST)
Received: from [127.0.0.1] (unknown [62.87.236.210])
by mail.studioatrium.pl (Postfix) with ESMTPA id 2DD4417601B7;
Fri, 27 Apr 2012 09:19:14 +0200 (CEST)
Message-ID: <4F9A387E.40201@studioatrium.pl>
Date: Fri, 27 Apr 2012 08:11:10 +0200
From: Wojtek Zadora <woj...@studioatrium.pl>
User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:12.0) Gecko/20120420 Thunderbird/12.0
MIME-Version: 1.0
To: prototype-scriptaculous@googlegroups.com
CC: Phil Petree <phil.pet...@gmail.com>
Subject: Re: [Proto-Scripty] Tactical Advice: Many rows, one checkbox per
row
References: <CAFtXL_2fQgzB+LEET97Es2miSEVN_NUVUhXvC12qchgN=vEjHA@mail.gmail.com> <040a01cd22ff$13a556a0$3af003e0$@com> <CAFtXL_1n7qbLrsCr_5iK5LEADuDWS05G-YXXUH-vxzFrwamr5A@mail.gmail.com> <04af01cd231e$c2fb1bc0$48f15340$@com> <CAFtXL_1hWdOg8Bqx8nf3XbC51kE_yn1FCLQAfvNZwfpX7mF...@mail.gmail.com> <050101cd232f$169f0dd0$43dd2970$@com> <4F991421.7030...@studioatrium.pl> <CAFtXL_0ipXHqXXyfqE553R8-5Yn+bW1kFzQXeGwqkcR6FOF...@mail.gmail.com> <CAFtXL_1w6yBiiwXGmdEn+T8=mVmDD3UccAoPApo5wVQxV0t...@mail.gmail.com>
In-Reply-To: <CAFtXL_1w6yBiiwXGmdEn+T8=mVmDD3UccAoPApo5wVQxV0t...@mail.gmail.com>
Content-Type: multipart/alternative;
boundary="------------020605050508010201040603"
This is a multi-part message in MIME format.
--------------020605050508010201040603
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 8bit
Hi
I wrote a routine (not sure if it fits exactly what you need), yet it
presents the logic and maybe you will be able to fit in your code.
Notice it is not tested and uses prototype 1.7. It is wrote as clousure
yet you may transfer it easly into Object Literal or class or something.
Ah - and there is only one observer - on form:
Here you are:
(function()
{
var _checked = undefined;
document.observe("dom:loaded", function()
{
// select all checked ckeckboxes
_checked = $('formId').select('input[checked]').pluck('value');
//register observer on form click
$('formId').on('click', _onClick);
});
function _onClick(event, element)
{
var isUnchecked = undefined;
//if clicked element is input
if (element.tagName.toLowerCase() == 'input') {
// here we find out if our checkbox was checked or not at time
of page loaded (isUnchecked == true shows it was checked and now is not)
isUnchecked = _checked.indexOf(element.value) > -1 ? true :
false;
// send Ajax request
_sendAjaxRequest(element, isUnchecked);
}
}
function _sendAjaxRequest(element, isUnchecked)
{
new Ajax.Request('url', {
method: 'post',
parameters: { here you serialize your checkbox (element)
manually},
onSuccess: function(transport) {
var response = transport.responseText.evalJSON();
......
},
onComplete: function() {
....
}
});
}
})();
Hope it helps
-wz
> I just drastically shortened this down...
> I'm now serializing the data manually with: strSerialize =
> "active_record=" +cbValue +"&state=" +strState;
> Which produces: active_record=5&state="checked"
> On the server side I can easily get the two values with $_POST... so
> far perfect...
> I've deleted all the hidden fields...
> Now when you click on the checkbox, onchange does all the work and
> since I enable/disable the form, only one submission happens at a
> time... exactly as we want it... Working perfectly...
> Thanks for the help!
> On Thu, Apr 26, 2012 at 10:51 AM, Phil Petree <phil.pet...@gmail.com
> <mailto:phil.pet...@gmail.com>> wrote:
>
> I got it working... here's where I am so far:
> 1) at the top of the form I created a hidden input called
> 'active_record' which holds the $('id') of the row in progress
> 2) each row has <input type=hidden name=$record_num value=''>
> <input type=checkbox value=$record_num checked='checked/unchecked'
> onchange='updateRow(this.id <http://this.id>, this.value);' >
> 3) updateRow(cbID, cbValue) {} wherein I set the value of the
> hidden $record_num with "checked" || "unchecked" and active_record
> with the cbValue and then call my ajax function which serializes
> the form and makes the call.
> 4) oncomplete: I clear the two hidden inputs.
> In my php code I can check my $_POST:
> $record = $_POST['active_record'];
> $value = $_POST[$record];
> error_log("record num is: $record and is set to $value");
> Problem:
> I'm still sending all the rows where the type=checkbox has
> checked=checked but I'm not processing those. Has no real impact
> on performance right now but with 1000's of users and frequent
> approval/disapprovals, it will unnecesssarily suck up bandwidth
> and time.
> Any idea how to serialize just one field? Afterall, all I really
> need to do is send the checked/unchecked from the active_records
> hidden input...
>
> On Thu, Apr 26, 2012 at 5:23 AM, Wojtek Zadora
> <woj...@studioatrium.pl <mailto:woj...@studioatrium.pl>> wrote:
>
> Hello
>
> The idea out of the head without code.
> What about creating a map of checked checkboxes on window load
> event or document:dom. Something this way:
>
> var checked = $('formId').select('input[checked]').pluck('value');
>
> Then on submit form you select again all checked checkboxes
> and compare (do other logic) with start map.
>
> -wz
>
>
>
>> the form observer is timed, not sure you can depend on one
>> firing before the other.
>>
>> Brian Marquis | Quotepro� | Senior Developer |
>> b...@quotepro.com <mailto:b...@quotepro.com>| Phone: 312.654.8045
>> x122 <tel:312.654.8045%20x122> / Fax: 312.654.1285
>> <tel:312.654.1285>
>>
>> image001
>>
>> /The information in this e-mail is confidential and may be
>> legally privileged. It is intended solely for the
>> addressee. Access to this e-mail by anyone else is
>> unauthorized./
>>
>> *From:*prototype-scriptaculous@googlegroups.com
>> <mailto:prototype-scriptaculous@googlegroups.com>
>> [mailto:prototype-scriptaculous@googlegroups.com] *On Behalf
>> Of *Phil Petree
>> *Sent:* Wednesday, April 25, 2012 3:24 PM
>> *To:* prototype-scriptaculous@googlegroups.com
>> <mailto:prototype-scriptaculous@googlegroups.com>
>> *Subject:* Re: [Proto-Scripty] Tactical Advice: Many rows,
>> one checkbox per row
>>
>> I'm now wondering if the onchange event will allow me to set
>> the value of the hidden field BEFORE the form.observer fires
>> the ajax call.... I'll test that tomorrow... My thinking is
>> that I'll set the value of a hidden field to on/off and the
>> name of the field to the record #.
>>
>> On Wed, Apr 25, 2012 at 4:05 PM, Brian Marquis
>> <br...@quotepro.com <mailto:br...@quotepro.com>> wrote:
>>
>> Yes, that's the nature of checkboxes and radio buttons. If
>> you need the value submitted in all circumstances, then
>> you're back to the hidden field implementation. Problem with
>> that approach is that it won't work if the user has
>> javascript disabled.
>>
>> A few options for event listeners (untested):
>>
>> $('tableid').observe('click',function(event) {
>>
>> var element = Event.element(event);
>>
>> if ( element.name <http://element.name> == "
>> ApprovedSubscribers" ) {
>>
>> new Ajax.Request( url, $H({ RecordId: element.value,
>> Checked: element.checked }));
>>
>> }
>>
>> });
>>
>> Or
>>
>> $$("input[type='checkbox']").invoke("observe","click",function(event)
>> {
>>
>> var element = Event.element(event);
>>
>> if ( element.name <http://element.name> == "
>> ApprovedSubscribers" ) {
>>
>> new Ajax.Request( url, $H({ RecordId: element.value,
>> Checked: element.checked }));
>>
>> }
>>
>> });
>>
>> Brian Marquis | Quotepro� | Senior Developer |
>> b...@quotepro.com <mailto:b...@quotepro.com>| Phone: 312.654.8045
>> x122 <tel:312.654.8045%20x122> / Fax: 312.654.1285
>> <tel:312.654.1285>
>>
>> image001
>>
>> /The information in this e-mail is confidential and may be
>> legally privileged. It is intended solely for the
>> addressee. Access to this e-mail by anyone else is
>> unauthorized./
>>
>> *From:*prototype-scriptaculous@googlegroups.com
>> <mailto:prototype-scriptaculous@googlegroups.com>
>> [mailto:prototype-scriptaculous@googlegroups.com
>> <mailto:prototype-scriptaculous@googlegroups.com>] *On Behalf
>> Of *Phil Petree
>> *Sent:* Wednesday, April 25, 2012 2:01 PM
>> *To:* prototype-scriptaculous@googlegroups.com
>> <mailto:prototype-scriptaculous@googlegroups.com>
>> *Subject:* Re: [Proto-Scripty] Tactical Advice: Many rows,
>> one checkbox per row
>>
>> Funny, I had just figured out what you had suggested for
>> getting rid of the hidden field and making the record id the
>> value.
>>
>> The problem is that ONLY the checked items get passed... if
>> someone is "unchecked" their approval is revoked so I need to
>> update the table for that as well.
>>
>> On Wed, Apr 25, 2012 at 12:18 PM, Brian Marquis
>> <br...@quotepro.com <mailto:br...@quotepro.com>> wrote:
>>
>> Why not get rid of the hidden field and assign the record id
>> as the value of the checkboxes. When you submit the form (or
>> serialize it) only the checked items will be passed to the
>> server.
>>
>> For example:
>>
>> <input name="ApprovedSubscribers" value="123" type="checkbox"
>> checked="checked"/> Joe Cool
>>
>> <input name="ApprovedSubscribers" value="456" type="checkbox"
>> /> Fred Flintstone
>>
>> <input name="ApprovedSubscribers" value="789" type="checkbox"
>> checked="checked" /> Barney Rubble
>>
>> Becomes ApprovedSubscribers="123, 789" when submitted.
>>
>> You can then observe the form for changes and submit via ajax
>> with a normal form submit for graceful degradation.
>>
>> Brian Marquis | Quotepro� | Senior Developer |
>> b...@quotepro.com <mailto:b...@quotepro.com>| Phone: 312.654.8045
>> x122 <tel:312.654.8045%20x122> / Fax: 312.654.1285
>> <tel:312.654.1285>
>>
>> image001
>>
>> /The information in this e-mail is confidential and may be
>> legally privileged. It is intended solely for the
>> addressee. Access to this e-mail by anyone else is
>> unauthorized./
>>
>> *From:*prototype-scriptaculous@googlegroups.com
>> <mailto:prototype-scriptaculous@googlegroups.com>
>> [mailto:prototype-scriptaculous@googlegroups.com
>> <mailto:prototype-scriptaculous@googlegroups.com>] *On Behalf
>> Of *Phil Petree
>> *Sent:* Wednesday, April 25, 2012 10:39 AM
>> *To:* prototype-scriptaculous@googlegroups.com
>> <mailto:prototype-scriptaculous@googlegroups.com>
>> *Subject:* [Proto-Scripty] Tactical Advice: Many rows, one
>> checkbox per row
>>
>> Hey All,
>>
>> My need is to create a easy approval process for what could
>> be a handful of "subscribers" up to 1000's of "subscribers".
>>
>> The idea thus far is to create a table that has (and needs)
>> only a few columns of information:
>>
>> RecordID (hidden) | Approved [checkbox] | Subscriber Name
>> (read_only text) | Subscriber City/State (read_only text)
>>
>> <refrain ad nausem 'x' times>
>>
>> What I want to do is to allow the user to CHECK/UNCHECK the
>> check box and that event will call an ajax function that will
>> submit the RecordID and Approved box[checked/unchecked]
>>
>> I don't want to submit ALL rows, only the row that was just
>> clicked.
>>
>> I'm pretty sure the FormObserver is the wrong way to go
>>
>> I'm pretty sure the $('approved').observe('change', xxx);
>> isn't right either as that could create 1000's of observers
>>
>> I could do an onchange event for each checkbox... but if I do
>> that, how do I serialize two fields of data?
>>
>> Advice please....
>>
>> Pete
>>
>>
>
> --
> You received this message because you are subscribed to the
> Google Groups "Prototype & script.aculo.us
> <http://script.aculo.us>" group.
> To post to this group, send email to
> prototype-scriptaculous@googlegroups.com
> <mailto:prototype-scriptaculous@googlegroups.com>.
> To unsubscribe from this group, send email to
> prototype-scriptaculous+unsubscribe@googlegroups.com
> <mailto:prototype-scriptaculous%2Bunsubscribe@googlegroups.com>.
> For more options, visit this group at
> http://groups.google.com/group/prototype-scriptaculous?hl=en.
>
>
>
> --
> You received this message because you are subscribed to the Google
> Groups "Prototype & script.aculo.us" group.
> To post to this group, send email to
> prototype-scriptaculous@googlegroups.com.
> To unsubscribe from this group, send email to
> prototype-scriptaculous+unsubscribe@googlegroups.com.
> For more options, visit this group at
> http://groups.google.com/group/prototype-scriptaculous?hl=en.
--------------020605050508010201040603
Content-Type: multipart/related;
boundary="------------010502040206050707040108"
--------------010502040206050707040108
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: 7bit
<html>
<head>
<meta content="text/html; charset=ISO-8859-1"
http-equiv="Content-Type">
</head>
<body bgcolor="#FFFFFF" text="#000000">
Hi<br>
<br>
I wrote a routine (not sure if it fits exactly what you need), yet
it presents the logic and maybe you will be able to fit in your
code.<br>
Notice it is not tested and uses prototype 1.7. It is wrote as
clousure yet you may transfer it easly into Object Literal or class
or something. Ah - and there is only one observer - on form:<br>
<br>
<br>
Here you are:<br>
<br>
(function()<br>
{<br>
var _checked = undefined;<br>
<br>
document.observe("dom:loaded", function() <br>
{<br>
// select all checked ckeckboxes<br>
_checked =
$('formId').select('input[checked]').pluck('value');<br>
<br>
//register observer on form click<br>
$('formId').on('click', _onClick);<br>
});<br>
<br>
function _onClick(event, element)<br>
{<br>
var isUnchecked = undefined;<br>
<br>
//if clicked element is input<br>
if (element.tagName.toLowerCase() == 'input') {<br>
<br>
// here we find out if our checkbox was checked or not at
time of page loaded (isUnchecked == true shows it was checked and
now is not)<br>
isUnchecked = _checked.indexOf(element.value) > -1 ?
true : false;<br>
<br>
// send Ajax request<br>
_sendAjaxRequest(element, isUnchecked);<br>
}<br>
}<br>
<br>
function _sendAjaxRequest(element, isUnchecked) <br>
{<br>
<br>
new Ajax.Request('url', {<br>
method: 'post',<br>
parameters: { here you serialize your checkbox (element)
manually},<br>
<br>
onSuccess: function(transport) {<br>
var response = transport.responseText.evalJSON();<br>
......<br>
},<br>
<br>
onComplete: function() {<br>
....<br>
}<br>
});<br>
}<br>
})();<br>
<br>
<br>
Hope it helps<br>
<br>
-wz<br>
<br>
<br>
<blockquote
cite="mid:CAFtXL_1w6yBiiwXGmdEn+T8=mVmDD3UccAoPApo5wVQxV0t...@mail.gmail.com"
type="cite">
<div class="gmail_extra">I just drastically shortened this down...</div>
<div class="gmail_extra"> </div>
<div class="gmail_extra">I'm now serializing the data manually
with: strSerialize = "active_record=" +cbValue +"&state="
+strState;</div>
<div class="gmail_extra">Which produces:
active_record=5&state="checked"</div>
<div class="gmail_extra"> </div>
<div class="gmail_extra">On the server side I can easily get the
two values with $_POST... so far perfect...</div>
<div class="gmail_extra"> </div>
<div class="gmail_extra">I've deleted all the hidden fields... </div>
<div class="gmail_extra"> </div>
<div class="gmail_extra">Now when you click on the checkbox,
onchange does all the work and since I enable/disable the form,
only one submission happens at a time... exactly as we want
it... Working perfectly...</div>
<div class="gmail_extra"> </div>
<div class="gmail_extra">Thanks for the help!</div>
<div class="gmail_extra"> </div>
<div class="gmail_extra"> </div>
<div class="gmail_quote">On Thu, Apr 26, 2012 at 10:51 AM, Phil
Petree <span dir="ltr"><<a moz-do-not-send="true"
href="mailto:phil.pet...@gmail.com" target="_blank">phil.pet...@gmail.com</a>></span>
wrote:<br>
<blockquote style="margin:0px 0px 0px
0.8ex;padding-left:1ex;border-left-color:rgb(204,204,204);border-left-width:1px;border-left-style:solid"
class="gmail_quote">
<div class="gmail_extra">I got it working... here's where I am
so far:</div>
<div class="gmail_extra"> </div>
<div class="gmail_extra">1) at the top of the form I created a
hidden input called 'active_record' which holds the $('id')
of the row in progress</div>
<div class="gmail_extra">2) each row has <input
type=hidden name=$record_num value=''> <input
type=checkbox value=$record_num checked='checked/unchecked'
onchange='updateRow(<a moz-do-not-send="true"
href="http://this.id" target="_blank">this.id</a>,
this.value);' ></div>
<div class="gmail_extra">3) updateRow(cbID, cbValue) {}
wherein I set the value of the hidden $record_num with
"checked" || "unchecked" and active_record with the cbValue
and then call my ajax function which serializes the form and
makes the call.</div>
<div class="gmail_extra">4) oncomplete: I clear the two hidden
inputs.</div>
<div class="gmail_extra"> </div>
<div class="gmail_extra">In my php code I can check my $_POST:</div>
<div class="gmail_extra">$record = $_POST['active_record'];<br>
$value = $_POST[$record];<br>
error_log("record num is: $record and is set to $value");<br>
</div>
<div class="gmail_extra">Problem:</div>
<div class="gmail_extra">I'm still sending all the rows where
the type=checkbox has checked=checked but I'm not processing
those. Has no real impact on performance right now but with
1000's of users and frequent approval/disapprovals, it will
unnecesssarily suck up bandwidth and time.</div>
<div class="gmail_extra"> </div>
<div class="gmail_extra">Any idea how to serialize just one
field? Afterall, all I really need to do is send the
checked/unchecked from the active_records hidden input...</div>
<div class="HOEnZb">
<div class="h5">
<div class="gmail_extra">
</div>
<div class="gmail_extra"> </div>
<div class="gmail_extra"> </div>
<div class="gmail_extra"> </div>
<div class="gmail_extra"><br>
</div>
<div class="gmail_quote">On Thu, Apr 26, 2012 at 5:23 AM,
Wojtek Zadora <span dir="ltr"><<a
moz-do-not-send="true"
href="mailto:woj...@studioatrium.pl" target="_blank">woj...@studioatrium.pl</a>></span>
wrote:<br>
<blockquote style="margin:0px 0px 0px
0.8ex;padding-left:1ex;border-left-color:rgb(204,204,204);border-left-width:1px;border-left-style:solid"
class="gmail_quote">
<div text="#000000" bgcolor="#FFFFFF"> Hello<br>
<br>
The idea out of the head without code.<br>
What about creating a map of checked checkboxes on
window load event or document:dom. Something this
way:<br>
<br>
var checked =
$('formId').select('input[checked]').pluck('value');<br>
<br>
Then on submit form you select again all checked
checkboxes and compare (do other logic) with start
map.<span><font color="#888888"><br>
<br>
-wz</font></span>
<div>
<div><br>
<br>
<br>
<blockquote type="cite">
<div>
<p class="MsoNormal"><a
moz-do-not-send="true"
name="136ef22f1e7e65d1_136edf6b3d8a1cd9__MailEndCompose"><span
style="color:rgb(31,73,125);font-family:"Calibri","sans-serif";font-size:11pt">the
form observer is timed, not sure you
can depend on one firing before the
other.</span></a></p>
<p class="MsoNormal"><span
style="color:rgb(31,73,125);font-family:"Calibri","sans-serif";font-size:11pt"> </span></p>
<p class="MsoNormal"><span
style="color:rgb(4,7,124);font-family:"Tahoma","sans-serif";font-size:9pt">Brian
Marquis | </span><span
style="color:rgb(4,7,124);font-family:"Tahoma","sans-serif";font-size:9pt">Quotepro</span><span
style="color:rgb(4,7,124);font-family:"Tahoma","sans-serif";font-size:9pt">®
| Senior Developer | </span><a
moz-do-not-send="true"
href="mailto:b...@quotepro.com"
target="_blank"><span
style="font-family:"Calibri","sans-serif";font-size:11pt">bm</span><span
style="color:navy;font-family:"Tahoma","sans-serif";font-size:9pt">@quotepro.com</span></a><span
style="color:rgb(4,7,124);font-family:"Tahoma","sans-serif";font-size:9pt">
</span><span
style="color:rgb(4,7,124);font-family:"Calibri","sans-serif";font-size:11pt">|
Phone: <a moz-do-not-send="true"
href="tel:312.654.8045%20x122"
target="_blank" value="+13126548045">312.654.8045
x122</a> / Fax: <a
moz-do-not-send="true"
href="tel:312.654.1285"
target="_blank" value="+13126541285">312.654.1285</a></span><span
style="color:rgb(31,73,125);font-family:"Calibri","sans-serif";font-size:11pt"></span></p>
<p class="MsoNormal"><span
style="color:rgb(4,7,124);font-family:"Calibri","sans-serif";font-size:11pt"><img
alt="image001"
src="cid:part8.04080702.05030...@studioatrium.pl"
border="0" height="40" width="180"></span><span
style="color:rgb(31,73,125);font-family:"Calibri","sans-serif";font-size:11pt"></span></p>
<p class="MsoNormal"><i><span
style="color:rgb(4,7,124);font-family:"Calibri","sans-serif";font-size:9pt">The
information in this e-mail is
confidential and may be legally
privileged. It is intended solely for
the addressee. Access to this e-mail
by anyone else is unauthorized.</span></i><span
style="color:rgb(31,73,125);font-family:"Calibri","sans-serif";font-size:11pt"></span></p>
<p class="MsoNormal"><span
style="color:rgb(31,73,125);font-family:"Calibri","sans-serif";font-size:11pt"> </span></p>
<div style="border-width:1pt medium
medium;border-style:solid none
none;border-color:rgb(181,196,223)
currentColor currentColor;padding:3pt 0in
0in">
<p class="MsoNormal"><b><span
style="font-family:"Tahoma","sans-serif";font-size:10pt">From:</span></b><span
style="font-family:"Tahoma","sans-serif";font-size:10pt">
<a moz-do-not-send="true"
href="mailto:prototype-scriptaculous@googlegroups.com"
target="_blank">prototype-scriptaculous@googlegroups.com</a>
[<a moz-do-not-send="true"
href="mailto:prototype-scriptaculous@googlegroups.com"
target="_blank">mailto:prototype-scriptaculous@googlegroups.com</a>]
<b>On Behalf Of </b>Phil Petree<br>
<b>Sent:</b> Wednesday, April 25, 2012
3:24 PM<br>
<b>To:</b> <a moz-do-not-send="true"
href="mailto:prototype-scriptaculous@googlegroups.com" target="_blank">prototype-scriptaculous@googlegroups.com</a><br>
<b>Subject:</b> Re: [Proto-Scripty]
Tactical Advice: Many rows, one
checkbox per row</span></p>
</div>
<p class="MsoNormal"> </p>
<div>
<p style="margin-bottom:12pt"
class="MsoNormal">I'm now wondering if
the onchange event will allow me to set
the value of the hidden field BEFORE the
form.observer fires the ajax call....
I'll test that tomorrow... My thinking
is that I'll set the value of a hidden
field to on/off and the name of the
field to the record #.</p>
<div>
<p class="MsoNormal">On Wed, Apr 25,
2012 at 4:05 PM, Brian Marquis <<a
moz-do-not-send="true"
href="mailto:br...@quotepro.com"
target="_blank">br...@quotepro.com</a>>
wrote:</p>
<div>
<div>
<p class="MsoNormal"><a
moz-do-not-send="true"
name="136ef22f1e7e65d1_136edf6b3d8a1cd9_136eb1bd8fdacc2b__MailEndCompose"><span
style="color:rgb(31,73,125);font-family:"Calibri","sans-serif";font-size:11pt">Yes,
that's the nature of
checkboxes and radio buttons.
If you need the value
submitted in all
circumstances, then you're
back to the hidden field
implementation. Problem with
that approach is that it won't
work if the user has
javascript disabled.</span></a></p>
<p class="MsoNormal"><span
style="color:rgb(31,73,125);font-family:"Calibri","sans-serif";font-size:11pt"> </span></p>
<p class="MsoNormal"><span
style="color:rgb(31,73,125);font-family:"Calibri","sans-serif";font-size:11pt">A
few options for event listeners
(untested):</span></p>
<p class="MsoNormal"><span
style="color:rgb(31,73,125);font-family:"Calibri","sans-serif";font-size:11pt"> </span></p>
<p class="MsoNormal"><span
style="color:rgb(31,73,125);font-family:"Calibri","sans-serif";font-size:11pt">$('tableid').observe('click',function(event)
{</span></p>
<p class="MsoNormal"><span
style="color:rgb(31,73,125);font-family:"Calibri","sans-serif";font-size:11pt">
var element =
Event.element(event);</span></p>
<p class="MsoNormal"><span
style="color:rgb(31,73,125);font-family:"Calibri","sans-serif";font-size:11pt">
if ( <a moz-do-not-send="true"
href="http://element.name"
target="_blank">element.name</a>
== " ApprovedSubscribers" ) {</span></p>
<p class="MsoNormal"><span
style="color:rgb(31,73,125);font-family:"Calibri","sans-serif";font-size:11pt">
new Ajax.Request( url, $H({
RecordId: element.value,
Checked: element.checked }));</span></p>
<p class="MsoNormal"><span
style="color:rgb(31,73,125);font-family:"Calibri","sans-serif";font-size:11pt">}</span></p>
<p class="MsoNormal"><span
style="color:rgb(31,73,125);font-family:"Calibri","sans-serif";font-size:11pt">});</span></p>
<p class="MsoNormal"><span
style="color:rgb(31,73,125);font-family:"Calibri","sans-serif";font-size:11pt"> </span></p>
<p class="MsoNormal"><span
style="color:rgb(31,73,125);font-family:"Calibri","sans-serif";font-size:11pt">Or</span></p>
<p class="MsoNormal"><span
style="color:rgb(31,73,125);font-family:"Calibri","sans-serif";font-size:11pt"> </span></p>
<p class="MsoNormal"><span
style="color:rgb(31,73,125);font-family:"Calibri","sans-serif";font-size:11pt">$$("input[type='checkbox']").invoke("observe","click",function(event)
{</span></p>
<p class="MsoNormal"><span
style="color:rgb(31,73,125);font-family:"Calibri","sans-serif";font-size:11pt">
var element =
Event.element(event);</span></p>
<p class="MsoNormal"><span
style="color:rgb(31,73,125);font-family:"Calibri","sans-serif";font-size:11pt">
if ( <a moz-do-not-send="true"
href="http://element.name"
target="_blank">element.name</a>
== " ApprovedSubscribers" ) {</span></p>
<p class="MsoNormal"><span
style="color:rgb(31,73,125);font-family:"Calibri","sans-serif";font-size:11pt">
new Ajax.Request( url, $H({
RecordId: element.value,
Checked: element.checked }));</span></p>
<p class="MsoNormal"><span
style="color:rgb(31,73,125);font-family:"Calibri","sans-serif";font-size:11pt">}</span></p>
<p class="MsoNormal"><span
style="color:rgb(31,73,125);font-family:"Calibri","sans-serif";font-size:11pt">});</span></p>
<div>
<p class="MsoNormal"><span
style="color:rgb(4,7,124);font-family:"Tahoma","sans-serif";font-size:9pt">Brian
Marquis | Quotepro® | Senior
Developer | </span><a
moz-do-not-send="true"
href="mailto:b...@quotepro.com"
target="_blank"><span
style="font-family:"Calibri","sans-serif";font-size:11pt">bm</span><span
style="color:navy;font-family:"Tahoma","sans-serif";font-size:9pt">@quotepro.com</span></a><span
style="color:rgb(4,7,124);font-family:"Tahoma","sans-serif";font-size:9pt">
</span><span
style="color:rgb(4,7,124);font-family:"Calibri","sans-serif";font-size:11pt">|
Phone: <a
moz-do-not-send="true"
href="tel:312.654.8045%20x122"
target="_blank">312.654.8045
x122</a> / Fax: <a
moz-do-not-send="true"
href="tel:312.654.1285"
target="_blank">312.654.1285</a></span></p>
<p class="MsoNormal"><span
style="color:rgb(4,7,124);font-family:"Calibri","sans-serif";font-size:11pt"><img
alt="image001"
src="cid:part19.01040703.01080...@studioatrium.pl"
border="0" height="40"
width="180"></span></p>
<p class="MsoNormal"><i><span
style="color:rgb(4,7,124);font-family:"Calibri","sans-serif";font-size:9pt">The
information in this e-mail
is confidential and may be
legally privileged. It is
intended solely for the
addressee. Access to this
e-mail by anyone else is
unauthorized.</span></i></p>
<p class="MsoNormal"><span
style="color:rgb(31,73,125);font-family:"Calibri","sans-serif";font-size:11pt"> </span></p>
</div>
<div style="border-width:1pt medium
medium;border-style:solid none
none;border-color:currentColor;padding:3pt
0in 0in">
<p class="MsoNormal"><b><span
style="font-family:"Tahoma","sans-serif";font-size:10pt">From:</span></b><span
style="font-family:"Tahoma","sans-serif";font-size:10pt">
<a moz-do-not-send="true"
href="mailto:prototype-scriptaculous@googlegroups.com"
target="_blank">prototype-scriptaculous@googlegroups.com</a>
[mailto:<a
moz-do-not-send="true"
href="mailto:prototype-scriptaculous@googlegroups.com"
target="_blank">prototype-scriptaculous@googlegroups.com</a>]
<b>On Behalf Of </b>Phil
Petree<br>
<b>Sent:</b> Wednesday, April
25, 2012 2:01 PM<br>
<b>To:</b> <a
moz-do-not-send="true"
href="mailto:prototype-scriptaculous@googlegroups.com"
target="_blank">prototype-scriptaculous@googlegroups.com</a><br>
<b>Subject:</b> Re:
[Proto-Scripty] Tactical
Advice: Many rows, one
checkbox per row</span></p>
</div>
<div>
<div>
<p class="MsoNormal"> </p>
<div>
<p class="MsoNormal">Funny, I
had just figured out what
you had suggested for
getting rid of the hidden
field and making the record
id the value.</p>
</div>
<div>
<p class="MsoNormal"> </p>
</div>
<div>
<p style="margin-bottom:12pt"
class="MsoNormal">The
problem is that ONLY the
checked items get passed...
if someone is "unchecked"
their approval is revoked so
I need to update the table
for that as well.</p>
</div>
<div>
<p class="MsoNormal">On Wed,
Apr 25, 2012 at 12:18 PM,
Brian Marquis <<a
moz-do-not-send="true"
href="mailto:br...@quotepro.com"
target="_blank">br...@quotepro.com</a>>
wrote:</p>
<div>
<div>
<p class="MsoNormal"><a
moz-do-not-send="true"
name="136ef22f1e7e65d1_136edf6b3d8a1cd9_136eb1bd8fdacc2b_136ea4c330b1949e__MailE"><span
style="color:rgb(31,73,125);font-family:"Calibri","sans-serif";font-size:11pt">Why
not get rid of the
hidden field and
assign the record id
as the value of the
checkboxes. When you
submit the form (or
serialize it) only
the checked items
will be passed to
the server.</span></a></p>
<p class="MsoNormal"><span
style="color:rgb(31,73,125);font-family:"Calibri","sans-serif";font-size:11pt">For
example:</span></p>
<p class="MsoNormal"><span
style="color:rgb(31,73,125);font-family:"Calibri","sans-serif";font-size:11pt"> </span></p>
<p class="MsoNormal"><span
style="color:rgb(31,73,125);font-family:"Calibri","sans-serif";font-size:11pt"><input
name="ApprovedSubscribers"
value="123"
type="checkbox"
checked="checked"/>
Joe Cool</span></p>
<p class="MsoNormal"><span
style="color:rgb(31,73,125);font-family:"Calibri","sans-serif";font-size:11pt"><input
name="ApprovedSubscribers"
value="456"
type="checkbox" />
Fred Flintstone</span></p>
<p class="MsoNormal"><span
style="color:rgb(31,73,125);font-family:"Calibri","sans-serif";font-size:11pt"><input
name="ApprovedSubscribers"
value="789"
type="checkbox"
checked="checked"
/> Barney Rubble</span></p>
<p class="MsoNormal"><span
style="color:rgb(31,73,125);font-family:"Calibri","sans-serif";font-size:11pt"> </span></p>
<p class="MsoNormal"><span
style="color:rgb(31,73,125);font-family:"Calibri","sans-serif";font-size:11pt">Becomes
ApprovedSubscribers="123,
789" when submitted.</span></p>
<p class="MsoNormal"><span
style="color:rgb(31,73,125);font-family:"Calibri","sans-serif";font-size:11pt"> </span></p>
<p class="MsoNormal"><span
style="color:rgb(31,73,125);font-family:"Calibri","sans-serif";font-size:11pt">You
can then observe the
form for changes and
submit via ajax with a
normal form submit for
graceful degradation.</span></p>
<p class="MsoNormal"><span
style="color:rgb(4,7,124);font-family:"Tahoma","sans-serif";font-size:9pt">Brian
Marquis | Quotepro®
| Senior Developer | </span><a
moz-do-not-send="true"
href="mailto:b...@quotepro.com" target="_blank"><span
style="font-family:"Calibri","sans-serif";font-size:11pt">bm</span><span
style="color:navy;font-family:"Tahoma","sans-serif";font-size:9pt">@quotepro.com</span></a><span
style="color:rgb(4,7,124);font-family:"Tahoma","sans-serif";font-size:9pt">
</span><span
style="color:rgb(4,7,124);font-family:"Calibri","sans-serif";font-size:11pt">|
Phone: <a
moz-do-not-send="true"
href="tel:312.654.8045%20x122" target="_blank">312.654.8045 x122</a> /
Fax: <a
moz-do-not-send="true"
href="tel:312.654.1285" target="_blank">312.654.1285</a></span></p>
<p class="MsoNormal"><span
style="color:rgb(4,7,124);font-family:"Calibri","sans-serif";font-size:11pt"><img
alt="image001"
src="cid:part19.01040703.01080...@studioatrium.pl"
border="0"
height="40"
width="180"></span></p>
<p class="MsoNormal"><i><span
style="color:rgb(4,7,124);font-family:"Calibri","sans-serif";font-size:9pt">The
information in this
e-mail is
confidential and may
be legally
privileged. It is
intended solely for
the
addressee. Access
to this e-mail by
anyone else is
unauthorized.</span></i></p>
<p class="MsoNormal"><span
style="color:rgb(31,73,125);font-family:"Calibri","sans-serif";font-size:11pt"> </span></p>
<div
style="border-width:1pt
medium
medium;border-style:solid
none
none;border-color:currentColor;padding:3pt
0in 0in">
<p class="MsoNormal"><b><span
style="font-family:"Tahoma","sans-serif";font-size:10pt">From:</span></b><span
style="font-family:"Tahoma","sans-serif";font-size:10pt">
<a
moz-do-not-send="true"
href="mailto:prototype-scriptaculous@googlegroups.com" target="_blank">prototype-scriptaculous@googlegroups.com</a>
[mailto:<a
moz-do-not-send="true"
href="mailto:prototype-scriptaculous@googlegroups.com" target="_blank">prototype-scriptaculous@googlegroups.com</a>]
<b>On Behalf Of </b>Phil
Petree<br>
<b>Sent:</b>
Wednesday, April 25,
2012 10:39 AM<br>
<b>To:</b> <a
moz-do-not-send="true"
href="mailto:prototype-scriptaculous@googlegroups.com" target="_blank">prototype-scriptaculous@googlegroups.com</a><br>
<b>Subject:</b>
[Proto-Scripty]
Tactical Advice:
Many rows, one
checkbox per row</span></p>
</div>
<div>
<div>
<p class="MsoNormal"> </p>
<div>
<p class="MsoNormal">Hey
All,</p>
</div>
<div>
<p class="MsoNormal"> </p>
</div>
<div>
<p class="MsoNormal">My
need is to create
a easy approval
process for what
could be a handful
of "subscribers"
up to 1000's of
"subscribers".</p>
</div>
<div>
<p class="MsoNormal"> </p>
</div>
<div>
<p class="MsoNormal">The
idea thus far is
to create a table
that has (and
needs) only a few
columns of
information:</p>
</div>
<div>
<p class="MsoNormal">RecordID
(hidden) |
Approved
[checkbox] |
Subscriber Name
(read_only text)
| Subscriber
City/State
(read_only text)</p>
</div>
<div>
<p class="MsoNormal"> </p>
</div>
<div>
<p class="MsoNormal"><refrain
ad nausem 'x'
times></p>
</div>
<div>
<p class="MsoNormal"> </p>
</div>
<div>
<p class="MsoNormal">What
I want to do is to
allow the user to
CHECK/UNCHECK the
check box and that
event will call an
ajax function that
will submit the
RecordID and
Approved
box[checked/unchecked]</p>
</div>
<div>
<p class="MsoNormal"> </p>
</div>
<div>
<p class="MsoNormal">I
don't want to
submit ALL rows,
only the row that
was just clicked.</p>
</div>
<div>
<p class="MsoNormal">I'm
pretty sure the
FormObserver is
the wrong way to
go</p>
</div>
<div>
<p class="MsoNormal">I'm
pretty sure
the $('approved').observe('change',
xxx); isn't right
either as that
could create
1000's of
observers</p>
</div>
<div>
<p class="MsoNormal"> </p>
</div>
<div>
<p class="MsoNormal">I
could do an
onchange event for
each checkbox...
but if I do that,
how do I serialize
two fields of
data?</p>
</div>
<div>
<p class="MsoNormal"> </p>
</div>
<div>
<p class="MsoNormal">Advice
please....</p>
</div>
<div>
<p class="MsoNormal"> </p>
</div>
<div>
<p class="MsoNormal">Pete</p>
</div>
<div>
<p class="MsoNormal"> </p>
</div>
<br>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</blockquote>
<br>
</div>
</div>
</div>
<div>
<div>
-- <br>
You received this message because you are
subscribed to the Google Groups "Prototype & <a
moz-do-not-send="true"
href="http://script.aculo.us" target="_blank">script.aculo.us</a>"
group.<br>
To post to this group, send email to <a
moz-do-not-send="true"
href="mailto:prototype-scriptaculous@googlegroups.com"
target="_blank">prototype-scriptaculous@googlegroups.com</a>.<br>
To unsubscribe from this group, send email to <a
moz-do-not-send="true"
href="mailto:prototype-scriptaculous%2Bunsubscribe@googlegroups.com"
target="_blank">prototype-scriptaculous+unsubscribe@googlegroups.com</a>.<br>
For more options, visit this group at <a
moz-do-not-send="true"
href="http://groups.google.com/group/prototype-scriptaculous?hl=en"
target="_blank">http://groups.google.com/group/prototype-scriptaculous?hl=en</a>.<br>
</div>
</div>
</blockquote>
</div>
<div class="gmail_extra"><br>
</div>
</div>
</div>
</blockquote>
</div>
<div class="gmail_extra"><br>
</div>
-- <br>
You received this message because you are subscribed to the Google
Groups "Prototype & script.aculo.us" group.<br>
To post to this group, send email to
<a class="moz-txt-link-abbreviated" href="mailto:prototype-scriptaculous@googlegroups.com">prototype-scriptaculous@googlegroups.com</a>.<br>
To unsubscribe from this group, send email to
<a class="moz-txt-link-abbreviated" href="mailto:prototype-scriptaculous+unsubscribe@googlegroups.com">prototype-scriptaculous+unsubscribe@googlegroups.com</a>.<br>
For more options, visit this group at
<a class="moz-txt-link-freetext" href="http://groups.google.com/group/prototype-scriptaculous?hl=en">http://groups.google.com/group/prototype-scriptaculous?hl=en</a>.<br>
</blockquote>
<br>
</body>
</html>
--------------010502040206050707040108
Content-Type: image/png
Content-Transfer-Encoding: base64
Content-ID: <part8.04080702.05030...@studioatrium.pl>
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
--------------010502040206050707040108
Content-Type: image/png
Content-Transfer-Encoding: base64
Content-ID: <part19.01040703.01080...@studioatrium.pl>
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
--------------010502040206050707040108--
--------------020605050508010201040603--