将错误消息与图标动态绑定到单个 jQuery 对话框

Posted

技术标签:

【中文标题】将错误消息与图标动态绑定到单个 jQuery 对话框【英文标题】:Dynamically bind error message along with a icon to a single jQuery dialog 【发布时间】:2019-05-04 21:18:01 【问题描述】:

我创建了一个全局 jQuery 对话框来显示应用程序中的所有错误消息。我能够将错误消息绑定到对话框,但是我无法同时显示该图标。为简单起见,我提供了一个带有通用 Google 图片的示例。

任何线索将不胜感激,或者如果有更好的方法,请提及。提前致谢

function showAlertDialog(message) 
            var $dialog = $('#ErrorMessageDialog')
                   .html(message)
                   .dialog(
                       modal: true,
                       title: 'Data Error!',
                       width: 400,
                       buttons: 
                           Ok: function () 
                               $(this).dialog('close');
                           
                       
                       
                   );
            $dialog.dialog('open');
        
        
        $("#btnOk").click(function()
        showAlertDialog('Ok is clicked');
        );
        
        $("#btnCancel").click(function()
        showAlertDialog('Cancel is clicked');
        );
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/jquery-ui.js"></script>

<div id="ErrorMessageDialog" style="display:none;">
        <table>
            <tr>
                <td><img src="https://www.google.co.in/logos/doodles/2014/world-cup-2014-1-6584893165273088-res.png"/></td>/*display icon*/
                <td></td>/*display error message*/
            </tr>
        </table>
    </div>

<input type="button" id="btnOk" value="OK"/>
<input type="button" id="btnCancel" value="Cancel"/>

【问题讨论】:

【参考方案1】:

您必须选择要更新的特定表格单元格。考虑使用类选择器。

示例

$(function() 
  function showAlertDialog(ttl, msg) 
    var $dialog = $('#ErrorMessageDialog')
      .dialog(
        modal: true,
        title: ttl,
        width: 400,
        buttons: 
          Ok: function() 
            $(this).dialog('close').dialog("destroy");
          
        
      );
    $('.message', $dialog).html(msg);
    $dialog.dialog('open');
  

  $("#btnOk").click(function() 
    showAlertDialog('Alert!', 'Ok is clicked');
  );

  $("#btnCancel").click(function() 
    showAlertDialog('Alert!', 'Cancel is clicked');
  );
);
<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/jquery-ui.js"></script>

<input type="button" id="btnOk" value="OK" />
<input type="button" id="btnCancel" value="Cancel" />

<div id="ErrorMessageDialog" style="display:none;">
  <table>
    <tr>
      <td class="icon"><img src="https://www.google.co.in/logos/doodles/2014/world-cup-2014-1-6584893165273088-res.png" /></td>
      <td class="message"></td>
    </tr>
  </table>
</div>

希望对您有所帮助。

【讨论】:

太棒了!!这有帮助【参考方案2】:

那是因为您将#ErrorMessageDialog 的内容替换为仅消息。关联消息时,您应该针对所需的td 元素而不是整个#ErrorMessageDialog。示例代码如下:

function showAlertDialog(message) 
            var $dialog = $('#ErrorMessageDialog .target')
                   .html(message)
                   .dialog(
                       modal: true,
                       title: 'Data Error!',
                       width: 400,
                       buttons: 
                           Ok: function () 
                               $(this).dialog('close');
                           
                       

                   );
            $dialog.dialog('open');
        

        $("#btnOk").click(function()
        showAlertDialog('Ok is clicked');
        );

        $("#btnCancel").click(function()
        showAlertDialog('Cancel is clicked');
        );

==

<script src="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/jquery-ui.js"></script>

<div id="ErrorMessageDialog" style="display:none;">
        <table>
            <tr>
                <td><img src="https://www.google.co.in/logos/doodles/2014/world-cup-2014-1-6584893165273088-res.png"/></td>/*display icon*/
                <td class="target"></td>/*display error message*/
            </tr>
        </table>
    </div>

<input type="button" id="btnOk" value="OK"/>
<input type="button" id="btnCancel" value="Cancel"/>

在这里,我的目标是 .target 类,我已将其赋予要关联消息的目标 td 元素。

【讨论】:

我仍然没有看到图标。【参考方案3】:

function showAlertDialog(message) 
var img='<img src="https://www.google.co.in/logos/doodles/2014/world-cup-2014-1-6584893165273088-res.png"/>';
            var $dialog = $('#ErrorMessageDialog')
                   .html(message+img)
                   .dialog(
                       modal: true,
                       title: 'Data Error!',
                       width: 400,
                       buttons: 
                           Ok: function () 
                               $(this).dialog('close');
                           
                       
                       
                   );
            $dialog.dialog('open');
        
        
        $("#btnOk").click(function()
        showAlertDialog('Ok is clicked');
        );
        
        $("#btnCancel").click(function()
        showAlertDialog('Cancel is clicked');
        );
<link href="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/jquery-ui.css" rel="stylesheet"/>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/jquery-ui.js"></script>

<div id="ErrorMessageDialog" style="display:none;">
        <table>
            <tr>
                <td><img src="https://www.google.co.in/logos/doodles/2014/world-cup-2014-1-6584893165273088-res.png"/></td>
                <td></td>
            </tr>
        </table>
    </div>

<input type="button" id="btnOk" value="OK"/>
<input type="button" id="btnCancel" value="Cancel"/>

将图像与对话消息一起附加。

【讨论】:

如果您附加图像,您将丢失“ErrorMessageDialog” id 元素下可能具有的任何格式,在示例中,OP 有一个将丢失的表。 对话框插件(jqueryUI) 将删除子元素 我可以看到图标,但是我丢失了表格格式

以上是关于将错误消息与图标动态绑定到单个 jQuery 对话框的主要内容,如果未能解决你的问题,请参考以下文章

signalr 必须有jquery吗

jquery热键动态绑定

JQuery .on() 没有将点击事件绑定到动态创建的元素[重复]

带有图标的输入字段的Jquery验证发送错误消息

将 jquery ui 对话框与 knockoutjs 集成

无法成功将 IsVisible 动态绑定到静态字段