你知道为什么选择菜单,输入类型文本和textarea表单元素没有出现?

时间:2018-06-03 16:35:34

标签: php twitter-bootstrap laravel

我希望左侧的布局,但右侧的布局显示。你知道为什么没有出现在选择菜单,输入类型文本和textarea?

enter image description here

在问题模型中,有一个getHtmlInput方法()在视图中用于生成表单字段:

在registration.blade.php中,问题与以下代码一起提供:

@if ($allParticipants == 0)
    @foreach($selectedRtype['questions'] as $customQuestion)

        <div class="form-group">
            <label for="participant_question">{{$customQuestion->question}}</label>
            @if($customQuestion->hasOptions())
                {!! $customQuestion->getHtmlInput(
                    $customQuestion->name,
                    $customQuestion->options,
                    ($customQuestion->pivot->required == '1'),
                    'form-control',
                    $customQuestion->type)
                !!}
            @endif
            <input type="hidden"
                   name="participant_question_required[]"
                   value="{{ $customQuestion->pivot->required }}">
            <input type="hidden"
                   value="{{ $customQuestion->id }}"
                   name="participant_question_id[]"/>
        </div>
    @endforeach
@endif

生成的html:

public function getHtmlInput($name = "", $options = "", $required = false, $class = "", $customtype=false)
    {
        $html = '';
        $html .= $customtype == 'select' ? "<select name='$name' class='$class' ".($required?:" required").">" : '';


        foreach($options as $option) {
            switch ($customtype) {
    case "text":
        $html .= " 
                <div class='form-group'>
                    <input type='text' name='participant_question' class='form-control'". ($required?:" required") . ">".
            '    <label class="form-check-label" for="exampleCheck1">' . $option->value. '</label>'.

            "</div>";

        $html .= "<input type='text' name='participant_question' value='".$option->value."' class='form-control'" . ($required?:" required") . ">";
        break;
    case "checkbox":
        $html .= " 
                <div class='form-check'>
                    <input type='checkbox' name='participant_question[]' value='".$option->value."' class='form-check-input'" . ($required?:" required") . ">".
                    '    <label class="form-check-label" for="exampleCheck1">' . $option->value. '</label>'.

                "</div>";
        break;
    case "radio_btn":
        $html .= " 
                <div class='form-check'>
                    <input type='radio' name='participant_question[]' value='".$option->value."' class='form-check-input'" . ($required?:" required") . ">".
            '    <label class="form-check-label" for="exampleCheck1">' . $option->value. '</label>'.

            "</div>";
        break;
    case "select_menu":
        $html .= "<option value='".$option->value."'>";
        break;
    case "textarea":
        $html .= "
          <div class='form-group'>
                <textarea name='participant_question' class='form-control' rows='3'" . ($required?:" required") . ">"
                    . $option->value .
                "</textarea>
        </div>";

        break;
            }
        }

        $html .= $customtype == 'select' ? "</select>" : '';

        return $html;
    }

https://jsfiddle.net/za2LpgL7/

1 个答案:

答案 0 :(得分:1)

是。你有几个项目阻止它工作。

首先不是代码问题 - 您只是对该对象没有任何选项。代码

@if($customQuestion->hasOptions())

失败,因为customQuestion没有附加选项。因此,输入框的代码永远不会被输入。创建一个测试对象,确保附加选项。这可能会或可能不会奏效,但它会让您进入下一步,看看getHtmlInput()功能是否有效。

在那个注释中,你设置的小提琴显示getHtmlInput()函数缺少某些代码或者对象缺少type参数。该功能似乎是为选择框输入选项,但没有选择标签。您需要在函数中初始化select(将正确的HTML <select></select>标记添加到函数中)。我看到你已经通过最终方法参数$customtype=false对此进行了排列,但看起来这也是未设置进入函数。如果你看一下小提琴,我们就会看到:

<label for="participant_question">Select menu question</label>
<option value="opt1"></option><option value="opt1">

永远不会输入<select>。我不认为你的代码太过分了(虽然如果没有通过if检查,我不知道选项中的选项如何),我认为你需要测试你的对象以查看它们包含的内容 - - 确保他们有选项,确保他们有$customtype并且它被设置为第一轮的选择。如果customQuestion对象具有正确的参数,则允许您正确测试。