Bootstrap工具提示动态值取决于是否填写

时间:2018-08-30 07:39:09

标签: javascript jquery razor bootstrap-4

嗨,我正在撞墙。

我正在尝试创建一个javascript / jquery事件,以检测鼠标何时位于按钮上方。当鼠标悬停在按钮上方时,我想要一个工具提示,其中包含来自输​​入的所需消息,但仍然需要填写。我希望它只是最后一条必需的消息,并且希望该消息更改,直到不再需要填写为止。

这是我到目前为止尝试过的。

我的剃刀cshtml

...Irrelevant html code
 <div class="form-group form-group-sm col-sm-6">
                    <div class="row">
                        <div class="col-sm-1"></div>
                        <div class="col-sm-4">
                            @Html.LabelFor(model => model.Name, htmlAttributes: new { @class = "col-form-label col-md-12" })
                        </div>

                        <div class="col-sm-6">
                            @Html.EditorFor(model => model.Name, new { htmlAttributes = new { @class = "form-control",title = Global.ToolTipName, data_toggle = "tooltip" } })
                            @Html.ValidationMessageFor(model => model.Name, "", new { @class = "text-danger" })
                        </div>
                    </div>
                </div>
                  <div class="form-group form-group-sm col-sm-6">
                    <div class="row">
                        <div class="col-sm-1"></div>
                        <div class="col-sm-4">
                            @Html.LabelFor(model => model.Phone, htmlAttributes: new { @class = "col-form-label col-md-12" })
                        </div>
                        <div class="col-sm-6">
                            @Html.EditorFor(model => model.Phone, new { htmlAttributes = new { @class = "form-control", title = Global.ToolTipPhone, data_toggle = "tooltip" } })
                            @Html.ValidationMessageFor(model => model.Phone, "", new { @class = "text-danger" })
                        </div>
                    </div>
                </div>
                 <div class="form-group form-group-sm col-sm-12">
                    <div class="row">
                        <div class="col-sm-12">
                            <input id="Send" type="submit" value="@Global.btnSend" title = "Not Implemented Yet!" data_toggle = "tooltip" class="btn btn-default" />
                        </div>
                    </div>
                </div>

...Irrelevant html code

我的脚本看起来像这样

   <script type="text/javascript">
   $(document).on('mouseenter', '#Send', function () {
           var allinput = $('input[data-val-required]').get();
           allinput.forEach(item => this.attr('data-original-title', item.title));//<--- tried this doesn't seem to work.
           //allinput.forEach(item => this.attr('data-original-title', item.title).tooltip('fixTitle').tooltip('show')); <--- and tried this didn't work either
           //allinput.forEach(item => this.attr('title', item.title).tooltip('fixTitle').tooltip('show'));<--- then I tried this didn't work either
           $(this).tooltip('show');
        });

        $(document).on('mouseleave', '#Send', function () {
            $(this).tooltip('hide');
        });
        </script>

所以我很茫然,我在这里错了。指向正确方向的指针或此处的一些帮助将不胜感激,即使告诉我我离自己的目标很远还是非常接近也将被认为是很大的帮助。

在CodeThing的帮助下,我制作了一个我想做的工作示例。

 $(document).on('mouseenter', '#Send', function () {
            var allinput = $('input[data-val-required]').get();
            var lastval = '';
            $.each(allinput, function () {
                if ($(this).val() == '') {
                    var forName = this.id;
                    var closestName = "label[for='" + forName + "']";
                    lastval += $(this.parentNode.parentNode).find(closestName).text() +", ";
                }
            });
            lastval = "Need to fill out these fields: " + lastval
            $(this).attr('title', lastval).tooltip('fixTitle').tooltip('show');
        });

        $(document).on('mouseleave', '#Send', function () {
            $(this).tooltip('hide');
        });

但是,这仅在Firefox中有效。我真的也需要在Edge和Chrome中都可以使用。

1 个答案:

答案 0 :(得分:1)

在这种情况下,请尝试以下代码并添加data-html =“ true”属性以发送按钮。它将在发送按钮工具提示的新行上显示所有空白字段的工具提示。

$(document).on('mouseenter', '#Send', function () {
    var allinput = $('input[data-val-required]').get();
    var lastval = '';
    $.each(allinput, function() {
        if($(this).val() == '') lastval += $(this).attr('title')+'<br />';
    });
    $(this).attr('title', lastval).tooltip('fixTitle').tooltip('show');
});

$(document).on('mouseleave', '#Send', function () {
    $(this).tooltip('hide');
});