我有一个配置php-file,其中我设置了一个具有3个单选按钮属性的数组。在无线电类中,我有一个名为“渲染”的方法,该方法应该输出单选按钮。单选按钮应放置在一个html字段集标签中。问题是,我得到了每个单选按钮的字段集和图例标签。但是我希望单选按钮html" target="_blank">嵌入1个字段集和1个图例中。我卡住了。
这是阵列配置:
<?php
$formConf = [
'kraken' => [
'type' => 'radio',
'id' => 'kraken',
'name' => 'monster',
'label' => 'Kraken',
'radio' => 'checked'
],
'sasquatch' => [
'type' => 'radio',
'id' => 'sasquatch',
'name' => 'monster',
'label' => 'Sasquatch',
'radio' => ''
],
'mothman' => [
'type' => 'radio',
'id' => 'mothman',
'name' => 'monster',
'label' => 'Mothman',
'radio' => ''
]];
这是广播课:
class Radio extends Input {
protected $radio = '';
protected $legend = 'Choose your favorite monster';
public function __construct(array $opts)
{
parent::__construct($opts);
$this->type = 'radio';
if (!isset($opts['radio']) || $opts['radio'] === '' || $opts['radio'] == null) {
$this->radio = '';
}
elseif (isset($opts['radio'])) {
$this->radio = $opts['radio'];
}
}
该方法应生成html标记:
public function render() : string
{
$out = '';
$out .= '<fieldset>';
$out .= '<legend>Choose your monster</legend>';
$out .= '<input type="' . $this->type . '"';
$out .= $this->renderRadioChecked();
$out .= '<label for="' . $this->id . '"' . '>';
$out .= $this->label . '</label>';
$out .= '<br/>';
$out .= '</fieldset>';
return $out;
}
protected function renderRadioChecked()
{
$out = '';
if ($this->radio == '') {
$out .= 'id="' . $this->id . '"' . 'name="' . $this->name . '"' . '>';
} else {
$out .= 'id="' . $this->id . '"' . 'name="' . $this->name . '"' . ' checked' . '>';
}
return $out;
}
预期结果应是:
<fieldset>
<legend>Choose your favorite monster</legend>
<input type="radio" id="kraken" name="monster">
<label for="kraken">Kraken</label><br/>
<input type="radio" id="sasquatch" name="monster" checked>
<label for="sasquatch">Sasquatch</label><br/>
<input type="radio" id="mothman" name="monster">
<label for="mothman">Mothman</label>
</fieldset>
这里可以看到带有单选按钮的完整版本:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/fieldset
注意:我在索引页面上已经有了一个表单标签和其他html标签。这就是为什么我只能生成这里给出的字段集。
我会删除字段集html,因为它不是单选按钮元素。我可能会考虑上一堂形体课,然后把收音机插入其中。因此,要获得多个单选按钮,在删除字段集
html后,循环单选按钮类,或者您可以允许单选按钮类一次创建多个单选按钮:
class Radio extends Input
{
protected $data;
public function __construct(array $opts)
{
parent::__construct($opts);
# The type is irrelevant since this class is a radio, the type is already known.
# I would just assign the array to a storage variable
if(empty($opts)) {
$this->data = false;
}
else {
# I would make sure the array is going to be consistent
$this->data = (isset($opts['radio']))? [$opts] : $opts;
}
}
public function render() : string
{
# May as well stop here if empty
if(empty($this->data))
return false;
# Loop your data array
foreach($this->data as $radio) {
# Build the input
$out[] = '<input type="radio" '.$this->createAttrElem($radio).' />';
# I would check to see if the label is set (you never know)
if(!empty($radio['label']))
$out[] = '<label for="'.$radio['id'].'">'.$radio['label'].'</label>';
}
# Send back the string
return implode(PHP_EOL, $out);
}
protected function createAttrElem($radio)
{
# See if all these attributes are set first
if(!empty($radio['id']))
$attr[] = 'id="'.$radio['id'].'"';
if(!empty($radio['name']))
$attr[] = 'name="'.$radio['name'].'"';
if(!empty($radio['checked']))
$attr[] = 'checked';
# Return a string
return (isset($attr))? implode(' ', $attr) : '';
}
/**
* @description I might maybe make this method just run the render method.
* Saves on having to write it out.
*/
public function __toString()
{
return $this->render();
}
}
form类可能看起来像:
class Form
{
protected $layout,
$type;
/**
* @description I would allow the form class to be flexible but set default to "form"
*/
public function __construct($type = 'form')
{
$this->type = $type;
}
/**
* @description Create the open tag
*/
public function open(array $attr)
{
$open[] = '<'.$this->type;
foreach($attr as $key => $value) {
$open[] = $key.'="'.$value.'"';
}
$this->layout[] = implode(' ', $open).'>';
return $this;
}
/**
* @description Here you would add the children of the parent element
*/
public function addChild($Object)
{
$this->layout[] = $Object->render();
return $this;
}
/**
* @description Close the element
*/
public function close()
{
$this->layout[] = '</'.$this->type.'>';
return $this;
}
/**
* @description Create a string of the layout
*/
public function render()
{
return implode(PHP_EOL, $this->layout);
}
/**
* @description Shortcut the render process
**/
public function __toString()
{
return $this->render();
}
}
然后要充分利用它:
$formConf = [
'kraken' => [
'type' => 'radio',
'id' => 'kraken',
'name' => 'monster',
'label' => 'Kraken',
'radio' => 'checked'
],
'sasquatch' => [
'type' => 'radio',
'id' => 'sasquatch',
'name' => 'monster',
'label' => 'Sasquatch',
'radio' => ''
],
'mothman' => [
'type' => 'radio',
'id' => 'mothman',
'name' => 'monster',
'label' => 'Mothman',
'radio' => ''
]
];
$Fieldset = new Form('fieldset');
echo $Fieldset->open(['name' => 'test'])
->addChild(new Radio($formConf))
->close();
这将输出:
<fieldset name="test">
<input type="radio" id="kraken" name="monster" />
<label for="kraken">Kraken</label>
<input type="radio" id="sasquatch" name="monster" />
<label for="sasquatch">Sasquatch</label>
<input type="radio" id="mothman" name="monster" />
<label for="mothman">Mothman</label>
</fieldset>
问题内容: 这是django模板的一部分,它应该做的是打印出几个单选按钮,对应于分配给按钮的答案。但是我不知道为什么我可以检查多个单选按钮,这让我很困惑。它应该只允许我检查一个单选按钮,但是我以某种方式拥有它,但是我却丢失了它。有什么帮助吗?谢谢。 问题答案: 只需给他们起相同的名字:
目前,我有3个单选按钮,我试图放置在我的2个输入字段旁边使用引导。我想把它们放在我的输入字段的同一行,但是它一直与这些输入字段的标签对齐。 有人知道我怎样才能把路线撞倒吗? 我的html: 这是我的https://embed.plnkr.co/YIFin0fUchhSyZHiWUO6/
问题内容: 单击按钮后,我将尝试呈现一个段落。 这是我的代码。 在这里,我试图在单击按钮时呈现“你好朋友”。但是没有用。 问题答案: 这不是正确的方法,因为它是一个事件处理程序,它将不呈现元素,您需要的是“元素的条件呈现”。 有关详细信息,请参阅“文档”。 条件渲染 。 脚步: 1-使用具有初始值的状态变量。 2-点击按钮将值更新为。 3-使用该状态值进行条件渲染。 工作代码:
我有一个单选按钮和一个文本字段。我希望文本字段是必需的,只有当单选按钮是勾选。 因此,只有选择createNewCollection时,collectionName才是必需的。
问题内容: 我有一个单选按钮,用于设置或基于交易类型的值 演示可以在这里找到 问题是当我单击任意一个单选按钮时,的值不会改变 我的JavaScript代码是 请让我知道我在做什么错。 另外,除非没有其他选择,否则我不想使用或用于此目的。 问题答案: 您在单选按钮的顶部贴了一个大标签,以防止输入到您的单选按钮。该html应该显示为: 然后它可以工作,当然,它可能看起来不像您想要的那样。
所以我找到了一段代码,当你从下拉菜单中选择标记时,它让你过滤标记,如果我从下拉菜单中取出单选按钮,然后单击它们,这段代码实际上起作用,但是如果我把它们放回一个下拉菜单中,它不会过滤标记,它只是保持原样。我希望它们的工作方式是这样的--如果我从下拉列表中选择Ryga,则只显示将其作为标记的标记[4]。 null null