Ok now that that has been straightened out, here's my full endeavour:

I'm trying to translate into jquery a useful functionality that I
found in the X-library (http://cross-browser.com/),
and that is multiple checkbox selection by click and drag over them.
(see http://cross-browser.com/x/examples/clickndrag_checkboxes.php).

His code is:

/* Defines Click-n-Drag Checkboxes functions*/

var gCheckedValue = null;

function initCheckBoxes(sTblId){
  xTableIterate(sTblId,
    function(td, isRow) {
      if (!isRow) {
        if (td.className=='mychkbox'){
        var cb = td.getElementsByTagName('input');
        if (cb && cb[0].type.toLowerCase() == 'checkbox') {
          td.checkBoxObj = cb[0];
          td.onmousedown = tdOnMouseDown;
          td.onmouseover = tdOnMouseOver;
          td.onclick = tdOnClick;
        }
        }
      }
    }
  );
}

function tdOnMouseDown(ev){
  if (!mymail.checkedall.checked){
  if (this.checkBoxObj) {
    gCheckedValue = this.checkBoxObj.checked = !
this.checkBoxObj.checked;
    document.onmouseup = docOnMouseUp;
    document.onselectstart = docOnSelectStart; // for IE
    xPreventDefault(ev); // cancel text selection
    }
  }
}

function tdOnMouseOver(ev){
  if (gCheckedValue != null && this.checkBoxObj) {
    this.checkBoxObj.checked = gCheckedValue;
  }
}

function docOnMouseUp(){
  document.onmouseup = null;
  document.onselectstart = null;
  gCheckedValue = null;
}

function tdOnClick()
{
  // Cancel a click on the checkbox itself. Let it bubble up to the TD
  return false;
}

function docOnSelectStart(ev)
{
  return false; // cancel text selection
}

/* End of Click-n-Drag Checkboxes functions*/



I tried to translate it into jquery like this:

$("td.mychkbox").each(
  function(){
    $(this).bind(
      "mousedown",
      function(){
        if (allchecked.attr("checked")==false){
          var eccomi = this;
          var eccoti = $(eccomi).find("input:checkbox");
          var eccoci = $(eccoti).attr("checked");
          gCheckedValue = eccoci = !eccoci;
          $(document).mouseup = function(){
            $(document).mouseup = null;
            $(document).selectstart = null;
            gCheckedValue = null;}

          $(document).selectstart = function(){return false;} // for
IE
        }
      });
    });

$("td.mychkbox").each(
  function(){
    $(this).bind(
      "mouseover",
      function(){
        if (gCheckedValue != null){
          var eccomi = this;
          var eccoti = $(eccomi).find("input:checkbox");
          $(eccoti).attr("checked") = gCheckedValue;
        }
      });
    });

$("td.mychkbox").each(
  function(){
    $(this).bind(
      "click",
      function(){
        return false;
      });
    });


Doesn't quite work right though. Clicking on the checkboxes has no
result, dragging over them has no result, it's as though all events
have been canceled. Anyone have any ideas?



On 9 Apr, 03:55, Lwangaman <donjohn.f...@gmail.com> wrote:
> Thanks a lot! That got me going again!
> (eccomi was supposed to be itsme, eccoti was supposed to be itsyou, I
> overlooked that transliteration that I was doing from italian!)
>
> On 9 Apr, 03:48, Shawn <sgro...@open2space.com> wrote:
>
> > Lwangaman wrote:
> > >           alert(itsme.name);
>
> > > // gives "undefined"
>
> > because a tablecell usually doesn't have a "name" attribute associated
> > with it.  Remember that your "itsme" variable is a reference to a DOM
> > element (not a jQuery element).  Which explains
>
> > >           var itsyou = itsme.attr("name");
> > >           alert(itsyou);
> > > // gives no results, it actually stops everything from working.
>
> > You would need itsyou = $(itsme).attr("name");  But even then, if
> > "itsme" is a tablecell, the name attribute likely doesn't exist.  Maybe
> > try "id" instead?
>
> > >           var itsyou = eccomi.find("input:checkbox");
> > >           alert(eccoti);
>
> > > // gives no results, it actually stops everything from working
>
> > if eccomi is a DOM element, then this would stop and likely throw an
> > error ('find' not a property or object)...  Try it as
>
> >   $(eccomi).find("input:checkbox");
>
> > The core issue that I can see is understanding the difference between a
> > DOM object/element and a jQuery object.  They are not the same, though
> > they are often used in a very similar manner.
>
> > HTH.
>
> > Shawn

Reply via email to