【问题标题】:Stupid escaping quotes question愚蠢的转义引号问题
【发布时间】:2011-08-29 21:04:30
【问题描述】:

我知道这应该是基本的,但对于我的生活......

eventMouseover: function(calEvent, domEvent) {
    if (typeof calEvent.id != 'undefined'){
        var layer = "<div id='events-layer' class='fc-transparent' style='position:absolute; width:100%; height:100%; top:-1px; text-align:right; z-index:100'> <a> <img border='0' style='padding-right:5px;' src='/icon_note_delete.png' width='16' onClick='deleteEvent("+calEvent.id+");'></a></div>";
        $(this).append(layer);
    }
}

不工作的部分是

onClick='deleteEvent("+calEvent.id+");

因为 id 将是一个字符串而不是一个数字,所以我需要引用它。

因为它给了我

onClick="deleteEvent(e_1984_2_184_668)"

但我需要

onClick="deleteEvent('e_1984_2_184_668')"

我试过了

onClick='deleteEvent(\'"+calEvent.id+"\');

但它也没有工作。我知道这是我想念的愚蠢的东西,但非常感谢帮助!

【问题讨论】:

    标签: javascript jquery escaping


    【解决方案1】:

    您应该使用双引号将calEvent.id 括起来,因为它在单引号字符串中:

    var layer = "<div id='events-layer' class='fc-transparent' style='position:absolute; width:100%; height:100%; top:-1px; text-align:right; z-index:100'> <a> <img border='0' style='padding-right:5px;' src='/icon_note_delete.png' width='16' onClick='deleteEvent(\""+calEvent.id+"\");'></a></div>";
    

    但是,在我看来,如果您使用 jQuery 调用链来创建 HTML,它会更容易和更易读:

    var layer = $('<div></div>').attr('id', 'events-layer')
                    .addClass('fc-transparent')
                    .css({
                        position: 'absolute',
                        width: '100%',
                        height: '100%',
                        top: '-1px',
                        textAlign: 'right',
                        zIndex: '100'
                    })
                    .appendTo(this);
    
    var anchor = $('<a></a>').appendTo(layer);
    
    var img = $('<img>').attr('border', '0')
                        .attr('src', '/icon_note_delete.png')
                        .attr('width', '16')
                        .css({
                            paddingRight: '5px'                        
                        })
                        .click(function() { deleteEvent(calEvent.id); })
                        .appendTo(anchor);
    

    【讨论】:

    • 这成功了!谢谢!!我想我认为 onclick="deleteEvent("e_9884_2_127_561");"无法正常工作,因为我总是尝试将参数放在与调用不同类型的引号中,但即使它看起来很奇怪,它也可以工作。再次感谢
    【解决方案2】:

    试试看:

     ... onClick='deleteEvent('" + calEvent.id + "'); ...
    

    【讨论】:

    • 我试过了,我把引号弄乱了
    【解决方案3】:

    单引号和双引号可能更容易翻转 (JSFiddle):

    var calEventId = 'testid';
    
    var layer = '<div id="events-layer" class="fc-transparent" style="position:absolute; width:100%; height:100%; top:-1px; text-align:right; z-index:100"> <a> <img border="0" style="padding-right:5px;" src="/icon_note_delete.png" width="16" onClick="deleteEvent(\'' + calEventId + '\');"></a></div>';
    
    alert(layer);
    

    然后您可以转义单引号,生成的 HTML 字符串看起来更像是您在日常标记中看到的 HTML(属性值周围的双引号,JavaScript 中的单引号)。

    【讨论】:

      【解决方案4】:

      看来您正在使用 jQuery。我建议使用 jQuery 创建元素:

      $('<div />', {
           id: 'events-layer',
           'class': 'fc-transparent someClass',
      }).append(
          $('<a />', {
               href: '<you need an href attribute>',
          }).append('<img />', {
              'class': 'someOtherClass',
              src: '/icon_note_delete.png',
              width: '16',
              click: function() {
                  deleteEvent(calEvent.id);
              }
          })
      ).appendTo(this);
      

      someClasssomeOtherClass 将是:

      .someClass {
          position:absolute; 
          width:100%; 
          height:100%; 
          top:-1px; 
          text-align:right; 
          z-index:100
      } 
      
      .someOtherClass {
          border: none;
          padding-right:5px;
          width: 16px;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-08-24
        • 1970-01-01
        • 2015-07-11
        • 1970-01-01
        • 2011-06-09
        • 2011-01-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多