javascript
  • jquery
  • 2016-01-26 7 views 0 likes 
    0

    У меня проблема с несколькими встроенными/чередующимися кавычками, на которые я надеюсь, кто-то может помочь. Вот соответствующий код ...Переключение между одиночными и двойными кавычками неопределенно

    displayMessage(
    
        "post success!", 
    
        "<p style='margin-top: 15px; margin-bottom: 15px'>if you'd like to share your post...</p> 
    
        <a onclick='openSharePopup("+textA+","+numberA+","+numberB+")' style='cursor: pointer; font-size:16px'> 
         share 
        </a>" 
    
    ); 
    
    function displayMessage(heading, text){ 
        $("#displayMessageHeadingDiv").html(heading); 
        $("#displayMessageBodyDiv").html(text); 
        $("#displayMessageParentDiv").css("display","block"); 
    } 
    

    displayMessage() вызывается после того, как пользователь успешно отправляет что-то на сайте, и работает отлично, если «textA» содержит апостроф (например, что-то вроде «Мнение Майка»)

    Проблема заключается в том, что хотя текстA заключен в двойные кавычки - эти двойные кавычки уже находятся внутри одинарных кавычек моего атрибута onclick, который сам находится внутри еще более двойных кавычек всего второго аргумента displayMessage.

    Ранее я думал, что чередование одиночных и двойных кавычек может продолжаться бесконечно, но этот пример, похоже, предполагает иное. Я никогда также экспериментировал с этими вариантами, чтобы разорвать любые кавычки в textA но ни работали ...

    textA = JSON.stringify(textA).replace(/&/, "&amp;").replace(/"/g, "&quot;"); 
    
    textA = textA.replace("'","\'"); 
    

    Любые идеи о том, куда я иду неправильно с этим?

    ответ

    3

    Ваш подход в корне неверен. Ручное создание встроенных обработчиков событий - это всегда неправильный способ сделать это.

    Лучшим решением было бы, например:

    var shareLink = $('<a>share</a>') 
            .css({ cursor: 'pointer', 'font-size': '16px' }) 
            .click(function() { 
              openSharePopup(textA , numberA, numberB); 
             }); 
    
    var msg = $("<p>if you'd like to share your post...</p>") 
           .css({ 'margin-top': '15px', 'margin-bottom': '15px' }); 
    
    displayMessage("post success!", shareLink.add(msg)); 
    
    function displayMessage(heading, text){ 
        $("#displayMessageHeadingDiv").html(heading); 
        $("#displayMessageBodyDiv").empty().append(text); 
        $("#displayMessageParentDiv").show(); 
    } 
    

    По существу, вы должны создать элементы, добавить обработчик щелчка через код и добавить элементы непосредственно в контейнер. Таким образом, вам не нужно думать о том, какие котировки использовать и где.

    (В другой стилистической стороне записки, было бы гораздо лучше использовать классы CSS для стилизации элементов вместо встроенных стилей.)

    +0

    Большое спасибо Juhana - очень рад услышать, что мой подход был в корне неправильно, и ваш rewrite действительно полностью решила проблему !! – d3wannabe

    Смежные вопросы