diff options
| author | xue <> | 2006-06-21 13:42:04 +0000 | 
|---|---|---|
| committer | xue <> | 2006-06-21 13:42:04 +0000 | 
| commit | 9af7e1312620de671c4312fbfd723b59ee4685df (patch) | |
| tree | 61ec683fa83d0f03bf7d37d87de0850c73653011 /framework/Web/UI/WebControls/TButton.php | |
| parent | da4d82f2df169e733e6dc0c76fd0df2cee607531 (diff) | |
Merge from 3.0 branch till 1191.
Diffstat (limited to 'framework/Web/UI/WebControls/TButton.php')
| -rw-r--r-- | framework/Web/UI/WebControls/TButton.php | 84 | 
1 files changed, 53 insertions, 31 deletions
diff --git a/framework/Web/UI/WebControls/TButton.php b/framework/Web/UI/WebControls/TButton.php index b77ca111..f1132625 100644 --- a/framework/Web/UI/WebControls/TButton.php +++ b/framework/Web/UI/WebControls/TButton.php @@ -13,37 +13,35 @@  /**
   * TButton class
   *
 - * TButton creates a click button on the page. It is used to submit data to a page.
 - * You can create either a <b>submit</b> button or a <b>command</b> button.
 + * TButton creates a click button on the page. It is mainly used to submit data to a page.
   *
 - * A <b>command</b> button has a command name (specified by
 - * the {@link setCommandName CommandName} property) and and a command parameter
 - * (specified by {@link setCommandParameter CommandParameter} property)
 - * associated with the button. This allows you to create multiple TButton
 + * TButton raises two server-side events, {@link onClick OnClick} and {@link onCommand OnCommand},
 + * when it is clicked on the client-side. The difference between these two events
 + * is that the event {@link onCommand OnCommand} is bubbled up to the button's ancestor controls.
 + * And within the event parameter for {@link onCommand OnCommand} contains the reference
 + * to the {@link setCommandName CommandName} and {@link setCommandParameter CommandParameter}
 + * property values that are set for the button object. This allows you to create multiple TButton
   * components on a Web page and programmatically determine which one is clicked
 - * with what parameter. You can provide an event handler for
 - * {@link onCommand OnCommand} event to programmatically control the actions performed
 - * when the command button is clicked. In the event handler, you can determine
 - * the {@link setCommandName CommandName} property value and
 - * the {@link setCommandParameter CommandParameter} property value
 - * through the {@link TCommandParameter::getName Name} and
 - * {@link TCommandParameter::getParameter Parameter} properties of the event
 - * parameter which is of type {@link TCommandEventParameter}.
 + * with what parameter.
   *
 - * A <b>submit</b> button does not have a command name associated with the button
 - * and clicking on it simply posts the Web page back to the server.
 - * By default, a TButton component is a submit button.
 - * You can provide an event handler for the {@link onClick OnClick} event
 - * to programmatically control the actions performed when the submit button is clicked.
 - *
 - * Clicking on button can trigger form validation, if
 + * Clicking on button can also trigger form validation, if
   * {@link setCausesValidation CausesValidation} is true.
 - * And the validation may be restricted within a certain group of validator
 + * The validation may be restricted within a certain group of validator
   * controls by setting {@link setValidationGroup ValidationGroup} property.
   * If validation is successful, the data will be post back to the same page.
   *
   * TButton displays the {@link setText Text} property as the button caption.
   *
 + * TButton can be one of three {@link setButtonType ButtonType}: Submit, Button and Reset.
 + * By default, it is a Submit button and the form submission uses the browser's
 + * default submission capability. If it is Button or Reset, postback may occur
 + * if one of the following conditions is met:
 + * - an event handler is attached to {@link onClick OnClick} event;
 + * - an event handler is attached to {@link onCommand OnCommand} event;
 + * - the button is in a non-empty validation group.
 + * In addition, clicking on a Reset button will clear up all input fields
 + * if the button does not cause a postback.
 + *
   * @author Qiang Xue <qiang.xue@gmail.com>
   * @version $Revision: $  $Date: $
   * @package System.Web.UI.WebControls
 @@ -68,12 +66,15 @@ class TButton extends TWebControl implements IPostBackEventHandler, IButtonContr  	{
  		$page=$this->getPage();
  		$page->ensureRenderInForm($this);
 -		$writer->addAttribute('type','submit');
 +		$writer->addAttribute('type',strtolower($this->getButtonType()));
  		if(($uniqueID=$this->getUniqueID())!=='')
  			$writer->addAttribute('name',$uniqueID);
  		$writer->addAttribute('value',$this->getText());
 -		if($this->getEnabled(true) )
 -			$this->renderClientControlScript($writer);
 +		if($this->getEnabled(true))
 +		{
 +			if($this->needPostBackScript())
 +				$this->renderClientControlScript($writer);
 +		}
  		else if($this->getEnabled()) // in this case, parent will not render 'disabled'
  			$writer->addAttribute('disabled','disabled');
 @@ -85,12 +86,8 @@ class TButton extends TWebControl implements IPostBackEventHandler, IButtonContr  	 */
  	protected function renderClientControlScript($writer)
  	{
 -		if($this->canCauseValidation())
 -		{
 -			$writer->addAttribute('id',$this->getClientID());
 -			$cs = $this->getPage()->getClientScript();
 -			$cs->registerPostBackControl($this->getClientClassName(),$this->getPostBackOptions());
 -		}
 +		$writer->addAttribute('id',$this->getClientID());
 +		$this->getPage()->getClientScript()->registerPostBackControl($this->getClientClassName(),$this->getPostBackOptions());
  	}
  	/**
 @@ -118,6 +115,15 @@ class TButton extends TWebControl implements IPostBackEventHandler, IButtonContr  	}
  	/**
 +	 * @return boolean whether the button needs javascript to do postback
 +	 */
 +	protected function needPostBackScript()
 +	{
 +		return $this->canCauseValidation() || ($this->getButtonType()!=='Submit' &&
 +			($this->hasEventHandler('OnClick') || $this->hasEventHandler('OnCommand')));
 +	}
 +
 +	/**
  	 * Returns postback specifications for the button.
  	 * This method is used by framework and control developers.
  	 * @return array parameters about how the button defines its postback behavior.
 @@ -262,6 +268,22 @@ class TButton extends TWebControl implements IPostBackEventHandler, IButtonContr  	{
  		$this->setViewState('ValidationGroup',$value,'');
  	}
 +
 +	/**
 +	 * @return string the type of the button. Defaults to 'Submit'.
 +	 */
 +	public function getButtonType()
 +	{
 +		return $this->getViewState('ButtonType','Submit');
 +	}
 +
 +	/**
 +	 * @param string the type of the button. Valid values include 'Submit', 'Reset', 'Button'.
 +	 */
 +	public function setButtonType($value)
 +	{
 +		$this->setViewState('ButtonType',TPropertyValue::ensureEnum($value,'Submit','Reset','Button'),'Submit');
 +	}
  }
  ?>
  | 
