diff options
author | ctrlaltca@gmail.com <> | 2012-02-05 17:00:00 +0000 |
---|---|---|
committer | ctrlaltca@gmail.com <> | 2012-02-05 17:00:00 +0000 |
commit | 4a8bd53f85b2dc0bcddd415873ce4ab49e1e099c (patch) | |
tree | c971ba1fcc4b414f2a4148b455ce249088cd5525 /framework/Web | |
parent | 871b91b471434aef56e421888bae1146dd74c990 (diff) |
Make validators' FocusOnError play nice with TCheckBoxList and TRadioButtonList
Diffstat (limited to 'framework/Web')
-rw-r--r-- | framework/Web/UI/WebControls/TBaseValidator.php | 13 | ||||
-rw-r--r-- | framework/Web/UI/WebControls/TRadioButtonList.php | 200 |
2 files changed, 112 insertions, 101 deletions
diff --git a/framework/Web/UI/WebControls/TBaseValidator.php b/framework/Web/UI/WebControls/TBaseValidator.php index 6e4e8f71..30320c5f 100644 --- a/framework/Web/UI/WebControls/TBaseValidator.php +++ b/framework/Web/UI/WebControls/TBaseValidator.php @@ -416,7 +416,18 @@ abstract class TBaseValidator extends TLabel implements IValidator public function getFocusElementID()
{
if(($id=$this->getViewState('FocusElementID',''))==='')
- $id=$this->getValidationTarget()->getClientID();
+ {
+ $target=$this->getValidationTarget();
+ /* Workaround: TCheckBoxList and TRadioButtonList nests the actual
+ * inputs inside a table; we ensure the first input gets focused
+ */
+ if($target instanceof TCheckBoxList && $target->getItemCount()>0)
+ {
+ $id=$target->getClientID().'_c0';
+ } else {
+ $id=$target->getClientID();
+ }
+ }
return $id;
}
diff --git a/framework/Web/UI/WebControls/TRadioButtonList.php b/framework/Web/UI/WebControls/TRadioButtonList.php index 88dff7dd..88d98881 100644 --- a/framework/Web/UI/WebControls/TRadioButtonList.php +++ b/framework/Web/UI/WebControls/TRadioButtonList.php @@ -1,101 +1,101 @@ -<?php
-/**
- * TRadioButtonList class file
- *
- * @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
+<?php +/** + * TRadioButtonList class file + * + * @author Qiang Xue <qiang.xue@gmail.com> + * @link http://www.pradosoft.com/ * @copyright Copyright © 2005-2011 PradoSoft - * @license http://www.pradosoft.com/license/
- * @version $Id$
- * @package System.Web.UI.WebControls
- */
-
-/**
- * Includes TRadioButton class
- */
-Prado::using('System.Web.UI.WebControls.TRadioButton');
-/**
- * Includes TCheckBoxList class
- */
-Prado::using('System.Web.UI.WebControls.TCheckBoxList');
-
-/**
- * TRadioButtonList class
- *
- * TRadioButtonList displays a list of radiobuttons on a Web page.
- *
- * TRadioButtonList inherits all properties and events of {@link TCheckBoxList}.
- * Each TRadioButtonList displays one group of radiobuttons, i.e., at most
- * one radiobutton can be selected at a time.
- *
- * @author Qiang Xue <qiang.xue@gmail.com>
- * @version $Id$
- * @package System.Web.UI.WebControls
- * @since 3.0
- */
-class TRadioButtonList extends TCheckBoxList
-{
- /**
- * @return boolean whether this control supports multiple selection. Always false for radiobutton list.
- */
- protected function getIsMultiSelect()
- {
- return false;
- }
-
- /**
- * Creates a control used for repetition (used as a template).
- * @return TControl the control to be repeated
- */
- protected function createRepeatedControl()
- {
- return new TRadioButton;
- }
-
- /**
- * Loads user input data.
- * This method is primarly used by framework developers.
- * @param string the key that can be used to retrieve data from the input data collection
- * @param array the input data collection
- * @return boolean whether the data of the control has been changed
- */
- public function loadPostData($key,$values)
- {
- $value=isset($values[$key])?$values[$key]:'';
- $oldSelection=$this->getSelectedIndex();
- $this->ensureDataBound();
- foreach($this->getItems() as $index=>$item)
- {
- if($item->getEnabled() && $item->getValue()===$value)
- {
- if($index===$oldSelection)
- return false;
- else
- {
- $this->setSelectedIndex($index);
- return true;
- }
- }
- }
- return false;
- }
-
- /**
- * @throws TNotSupportedException if this method is invoked
- */
- public function setSelectedIndices($indices)
- {
- throw new TNotSupportedException('radiobuttonlist_selectedindices_unsupported');
- }
-
- /**
- * Gets the name of the javascript class responsible for performing postback for this control.
- * This method overrides the parent implementation.
- * @return string the javascript class name
- */
- protected function getClientClassName()
- {
- return 'Prado.WebUI.TRadioButtonList';
- }
-}
-
+ * @license http://www.pradosoft.com/license/ + * @version $Id$ + * @package System.Web.UI.WebControls + */ + +/** + * Includes TRadioButton class + */ +Prado::using('System.Web.UI.WebControls.TRadioButton'); +/** + * Includes TCheckBoxList class + */ +Prado::using('System.Web.UI.WebControls.TCheckBoxList'); + +/** + * TRadioButtonList class + * + * TRadioButtonList displays a list of radiobuttons on a Web page. + * + * TRadioButtonList inherits all properties and events of {@link TCheckBoxList}. + * Each TRadioButtonList displays one group of radiobuttons, i.e., at most + * one radiobutton can be selected at a time. + * + * @author Qiang Xue <qiang.xue@gmail.com> + * @version $Id$ + * @package System.Web.UI.WebControls + * @since 3.0 + */ +class TRadioButtonList extends TCheckBoxList +{ + /** + * @return boolean whether this control supports multiple selection. Always false for radiobutton list. + */ + protected function getIsMultiSelect() + { + return false; + } + + /** + * Creates a control used for repetition (used as a template). + * @return TControl the control to be repeated + */ + protected function createRepeatedControl() + { + return new TRadioButton; + } + + /** + * Loads user input data. + * This method is primarly used by framework developers. + * @param string the key that can be used to retrieve data from the input data collection + * @param array the input data collection + * @return boolean whether the data of the control has been changed + */ + public function loadPostData($key,$values) + { + $value=isset($values[$key])?$values[$key]:''; + $oldSelection=$this->getSelectedIndex(); + $this->ensureDataBound(); + foreach($this->getItems() as $index=>$item) + { + if($item->getEnabled() && $item->getValue()===$value) + { + if($index===$oldSelection) + return false; + else + { + $this->setSelectedIndex($index); + return true; + } + } + } + return false; + } + + /** + * @throws TNotSupportedException if this method is invoked + */ + public function setSelectedIndices($indices) + { + throw new TNotSupportedException('radiobuttonlist_selectedindices_unsupported'); + } + + /** + * Gets the name of the javascript class responsible for performing postback for this control. + * This method overrides the parent implementation. + * @return string the javascript class name + */ + protected function getClientClassName() + { + return 'Prado.WebUI.TRadioButtonList'; + } +} + |