summaryrefslogtreecommitdiff
path: root/framework/Web/UI/WebControls/TButton.php
diff options
context:
space:
mode:
authorxue <>2006-06-21 13:42:04 +0000
committerxue <>2006-06-21 13:42:04 +0000
commit9af7e1312620de671c4312fbfd723b59ee4685df (patch)
tree61ec683fa83d0f03bf7d37d87de0850c73653011 /framework/Web/UI/WebControls/TButton.php
parentda4d82f2df169e733e6dc0c76fd0df2cee607531 (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.php84
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');
+ }
}
?>