[jQuery] Re: Focus First 'visible' field

2008-04-22 Thread Jacky See

Someone found that this method does not handle visibility correctly.
When a visibility:hidden parent with a visibility:show child, the
child would override its parent's property (of course!).
So the script only need to check display:none parent, which would
introduce another filter:

$(:text:visible:enabled).filter(function(){
return $(this).filter(function(){
   this.style.display == none;
}).size()==0;
}).eq(0).focus();

On 4月17日, 下午9時40分, Jacky [EMAIL PROTECTED] wrote:
 To work on any type of input should be easy, just replace ':text' with
 input.

 I know that IE would give error when you're focusing a 'disappearing' input.
 (parent is hidden, for example). But I do not encounter any error like you
 described. Any sample code for  your HTML?

 On Tue, Apr 15, 2008 at 9:00 AM, MichaelEvangelista [EMAIL PROTECTED]
 wrote:





  I've been looking for a solution like this, but that will work with
  any type of form input.
  The code I've been using is below (where form-id is the ID of the
  containing form)

  It works great in Firefox but IE throws the error
  'this.parentNode.borderCss.on' is null or not an object

  I tried your example code above, and got the same error

  here is what I was using :

  // --- Put the cursor in the first field on page load
  var $firstfield = function(){
  $('#form-id input:eq(0)').focus();
  }
  $firstfield();

  Could this have anything to do with my markup? I didnt get that error
  on your demo, but i did when I applied your code to my form.

  On Apr 13, 7:54 am, Jacky  See [EMAIL PROTECTED] wrote:
   Hi all,

   For focusing first input text field, the usual solution is $
   (':text:visible:enabled:eq(0)').focus(). However, when these fields
   are in an ':hidden' parent (not 'visible' by our eyes), it won't work.

   Currently I tried to solve this by:

   $(:text:visible:enabled).filter(function(){
   return $(this).parents(:hidden).size()==0;

   }).slice(0,1).focus();

   I have setup a test page for this:
 http://www.seezone.net/dev/focusField.html
   Try to toggle different parent to and click 'focus'. It should work
   correctly.

   I would like to know if there is any other 'selector-based' way to do
   so?

 --
 Best Regards,
 Jacky
 網絡暴民http://jacky.seezone.net


[jQuery] Re: Focus First 'visible' field

2008-04-22 Thread Erik Beeson
Your inner $(this).filter(...) doesn't make sense to me. This works for me
on FF2/Mac:
$(':input:visible').filter(function() {
return $(this).parents(':hidden').length == 0;
}).slice(0,1).focus();

That is: Select all visible inputs elements, filter out any who have parents
which are hidden, select the first one of those that remain, focus it.

--Erik

2008/4/21 Jacky See [EMAIL PROTECTED]:


 Someone found that this method does not handle visibility correctly.
 When a visibility:hidden parent with a visibility:show child, the
 child would override its parent's property (of course!).
 So the script only need to check display:none parent, which would
 introduce another filter:

 $(:text:visible:enabled).filter(function(){
 return $(this).filter(function(){
   this.style.display == none;
}).size()==0;
 }).eq(0).focus();

 On 4月17日, 下午9時40分, Jacky [EMAIL PROTECTED] wrote:
  To work on any type of input should be easy, just replace ':text' with
  input.
 
  I know that IE would give error when you're focusing a 'disappearing'
 input.
  (parent is hidden, for example). But I do not encounter any error like
 you
  described. Any sample code for  your HTML?
 
  On Tue, Apr 15, 2008 at 9:00 AM, MichaelEvangelista [EMAIL PROTECTED]
  wrote:
 
 
 
 
 
   I've been looking for a solution like this, but that will work with
   any type of form input.
   The code I've been using is below (where form-id is the ID of the
   containing form)
 
   It works great in Firefox but IE throws the error
   'this.parentNode.borderCss.on' is null or not an object
 
   I tried your example code above, and got the same error
 
   here is what I was using :
 
   // --- Put the cursor in the first field on page load
   var $firstfield = function(){
   $('#form-id input:eq(0)').focus();
   }
   $firstfield();
 
   Could this have anything to do with my markup? I didnt get that error
   on your demo, but i did when I applied your code to my form.
 
   On Apr 13, 7:54 am, Jacky  See [EMAIL PROTECTED] wrote:
Hi all,
 
For focusing first input text field, the usual solution is $
(':text:visible:enabled:eq(0)').focus(). However, when these fields
are in an ':hidden' parent (not 'visible' by our eyes), it won't
 work.
 
Currently I tried to solve this by:
 
$(:text:visible:enabled).filter(function(){
return $(this).parents(:hidden).size()==0;
 
}).slice(0,1).focus();
 
I have setup a test page for this:
  http://www.seezone.net/dev/focusField.html
Try to toggle different parent to and click 'focus'. It should work
correctly.
 
I would like to know if there is any other 'selector-based' way to
 do
so?
 
  --
  Best Regards,
  Jacky
  網絡暴民http://jacky.seezone.net



[jQuery] Re: Focus First 'visible' field

2008-04-22 Thread Jacky
This is my very first implementation.
But it fails on visibility:hidden parent which has a visibility:show child.

You may try the updated demo page. Box 11 would still be visible even when
you toggle its parent's visibility.
http://www.seezone.net/dev/focusField.html

':hidden' selector would try to select both display:none and
visibility:hidden element.
Therefore, we need to only select display:none parent, not
visibility:hidden.

P.S. (I missed 'return' in the previous post)

$(:text:visible:enabled).filter(function(){
   return $(this).filter(function(){
  return this.style.display == none;
   }).size()==0;
}).eq(0).focus();


2008/4/22 Erik Beeson [EMAIL PROTECTED]:

 Your inner $(this).filter(...) doesn't make sense to me. This works for me
 on FF2/Mac:
 $(':input:visible').filter(function() {
 return $(this).parents(':hidden').length == 0;
 }).slice(0,1).focus();

 That is: Select all visible inputs elements, filter out any who have
 parents which are hidden, select the first one of those that remain, focus
 it.

 --Erik

 2008/4/21 Jacky See [EMAIL PROTECTED]:


  Someone found that this method does not handle visibility correctly.
  When a visibility:hidden parent with a visibility:show child, the
  child would override its parent's property (of course!).
  So the script only need to check display:none parent, which would
  introduce another filter:
 
  $(:text:visible:enabled).filter(function(){
  return $(this).filter(function(){
this.style.display == none;
 }).size()==0;
  }).eq(0).focus();
 
  On 4月17日, 下午9時40分, Jacky [EMAIL PROTECTED] wrote:
   To work on any type of input should be easy, just replace ':text' with
   input.
  
   I know that IE would give error when you're focusing a 'disappearing'
  input.
   (parent is hidden, for example). But I do not encounter any error like
  you
   described. Any sample code for  your HTML?
  
   On Tue, Apr 15, 2008 at 9:00 AM, MichaelEvangelista 
  [EMAIL PROTECTED]
   wrote:
  
  
  
  
  
I've been looking for a solution like this, but that will work with
any type of form input.
The code I've been using is below (where form-id is the ID of the
containing form)
  
It works great in Firefox but IE throws the error
'this.parentNode.borderCss.on' is null or not an object
  
I tried your example code above, and got the same error
  
here is what I was using :
  
// --- Put the cursor in the first field on page load
var $firstfield = function(){
$('#form-id input:eq(0)').focus();
}
$firstfield();
  
Could this have anything to do with my markup? I didnt get that
  error
on your demo, but i did when I applied your code to my form.
  
On Apr 13, 7:54 am, Jacky  See [EMAIL PROTECTED] wrote:
 Hi all,
  
 For focusing first input text field, the usual solution is $
 (':text:visible:enabled:eq(0)').focus(). However, when these
  fields
 are in an ':hidden' parent (not 'visible' by our eyes), it won't
  work.
  
 Currently I tried to solve this by:
  
 $(:text:visible:enabled).filter(function(){
 return $(this).parents(:hidden).size()==0;
  
 }).slice(0,1).focus();
  
 I have setup a test page for this:
   http://www.seezone.net/dev/focusField.html
 Try to toggle different parent to and click 'focus'. It should
  work
 correctly.
  
 I would like to know if there is any other 'selector-based' way to
  do
 so?
  
   --
   Best Regards,
   Jacky
   網絡暴民http://jacky.seezone.net
 




-- 
Best Regards,
Jacky
網絡暴民 http://jacky.seezone.net


[jQuery] Re: Focus First 'visible' field

2008-04-17 Thread Jacky
To work on any type of input should be easy, just replace ':text' with
input.

I know that IE would give error when you're focusing a 'disappearing' input.
(parent is hidden, for example). But I do not encounter any error like you
described. Any sample code for  your HTML?

On Tue, Apr 15, 2008 at 9:00 AM, MichaelEvangelista [EMAIL PROTECTED]
wrote:


 I've been looking for a solution like this, but that will work with
 any type of form input.
 The code I've been using is below (where form-id is the ID of the
 containing form)

 It works great in Firefox but IE throws the error
 'this.parentNode.borderCss.on' is null or not an object

 I tried your example code above, and got the same error

 here is what I was using :

 // --- Put the cursor in the first field on page load
 var $firstfield = function(){
 $('#form-id input:eq(0)').focus();
 }
 $firstfield();

 Could this have anything to do with my markup? I didnt get that error
 on your demo, but i did when I applied your code to my form.



 On Apr 13, 7:54 am, Jacky  See [EMAIL PROTECTED] wrote:
  Hi all,
 
  For focusing first input text field, the usual solution is $
  (':text:visible:enabled:eq(0)').focus(). However, when these fields
  are in an ':hidden' parent (not 'visible' by our eyes), it won't work.
 
  Currently I tried to solve this by:
 
  $(:text:visible:enabled).filter(function(){
  return $(this).parents(:hidden).size()==0;
 
  }).slice(0,1).focus();
 
  I have setup a test page for this:
 http://www.seezone.net/dev/focusField.html
  Try to toggle different parent to and click 'focus'. It should work
  correctly.
 
  I would like to know if there is any other 'selector-based' way to do
  so?




-- 
Best Regards,
Jacky
網絡暴民 http://jacky.seezone.net


[jQuery] Re: Focus First 'visible' field

2008-04-14 Thread MichaelEvangelista

I've been looking for a solution like this, but that will work with
any type of form input.
The code I've been using is below (where form-id is the ID of the
containing form)

It works great in Firefox but IE throws the error
'this.parentNode.borderCss.on' is null or not an object

I tried your example code above, and got the same error

here is what I was using :

// --- Put the cursor in the first field on page load
var $firstfield = function(){
$('#form-id input:eq(0)').focus();
}
$firstfield();

Could this have anything to do with my markup? I didnt get that error
on your demo, but i did when I applied your code to my form.



On Apr 13, 7:54 am, Jacky  See [EMAIL PROTECTED] wrote:
 Hi all,

 For focusing first input text field, the usual solution is $
 (':text:visible:enabled:eq(0)').focus(). However, when these fields
 are in an ':hidden' parent (not 'visible' by our eyes), it won't work.

 Currently I tried to solve this by:

 $(:text:visible:enabled).filter(function(){
 return $(this).parents(:hidden).size()==0;

 }).slice(0,1).focus();

 I have setup a test page for this:http://www.seezone.net/dev/focusField.html
 Try to toggle different parent to and click 'focus'. It should work
 correctly.

 I would like to know if there is any other 'selector-based' way to do
 so?