2016-06-15 3 views
-1

У меня есть довольно плохая «ситуация с цитированием» на данный момент. Я работаю внутри innerHTML и внутри этого я хочу, чтобы вызвать функцию на OnClick-Event, который оставляет меня следующее:Escaping Quotes не работает в JavaScript innerHTML

modalEl.innerHTML = '<form>'+ 
    '<legend>Gruppe bearbeiten</legend>'+ 
    '<div class="mui-textfield">'+ 
     '<input id="groupName" type="text" value="'+name+'">'+ 
     '<label>Gruppenname</label>'+ 
    '</div>'+           
    '<br/>'+ 
    '<div class="mui-textfield">'+ 
     '<textarea id="groupDesc" placeholder="">'+desc+'</textarea>'+ 
     '<label>Beschreibung</label>'+ 
    '</div>'+           
    '<br/>'+ 
    '<div class="mui-textfield">'+ 
    '<label>Geräte hinzufügen</label>'+ 
    '<select id="devicetable" data-placeholder="ID und/oder Namen eingeben" class="chosen-select" multiple style="width:350px;" tabindex="4">'+ 
    '<option value="0"></option>'+ 
    '</select>'+ 
     '</div>'+ 
     '<br>'+ 
     '<div class="outterformbuttons">'+ 
     '<div class="formbuttons">'+ 
      '<button type="button" class="mui-btn mui-btn--raised" onclick="sendUpdatedGroup(id, document.getElementById(&quot;groupName&quot;).value, document.getElementById(&quot;groupDesc&quot;).value)">Speichern</button>'+ 
      '<button type="button" class="mui-btn mui-btn--raised" onclick="deactivateOverlay()">Abbrechen</button>'+ 
      '</div>'+ 
     '</div>'+ 
    '</form>'; 

Я уже пытался избежать цитаты и использовать HTML-цитаты, но ни работал.

+1

Я Wouldnt пишут, что много HTML в JavaScript, и вместо этого используйте некоторую форму шаблонов, например Handlebars, или hav e что html как часть страницы, но не отображается, а затем использовать это для загрузки. Но, по крайней мере, я бы назначил классы кнопкам, а затем написал отдельный обработчик события клика для этих классов для выполнения требуемого действия. –

+0

Я думаю, вы забыли объяснить, в чем состоит ваша проблема (помимо написания кода внутри строк JavaScript). –

ответ

2

Вместо HTML-кодирования одиночных кавычек, просто JavaString избегает одиночных кавычек.

'<button type="button" class="mui-btn mui-btn--raised" 
    onclick="sendUpdatedGroup(id, document.getElementById(\'groupName\').value, 
    document.getElementById(\'groupDesc\').value)">Speichern</button>'+ 

Если вы не хотите, чтобы попасть в отводящей ад, не использовать обработчики событий, как атрибуты HTML (которые мы перестали делать около 10 лет назад).

modalEl.innerHTML = '<form>'+ 
'<legend>Gruppe bearbeiten</legend>'+ 
'<div class="mui-textfield">'+ 
    '<input id="groupName" type="text" value="'+name+'">'+ 
    '<label>Gruppenname</label>'+ 
'</div>'+           
'<br/>'+ 
'<div class="mui-textfield">'+ 
    '<textarea id="groupDesc" placeholder="">'+desc+'</textarea>'+ 
    '<label>Beschreibung</label>'+ 
'</div>'+           
'<br/>'+ 
'<div class="mui-textfield">'+ 
'<label>Geräte hinzufügen</label>'+ 
'<select id="devicetable" data-placeholder="ID und/oder Namen eingeben" class="chosen-select" multiple style="width:350px;" tabindex="4">'+ 
'<option value="0"></option>'+ 
'</select>'+ 
    '</div>'+ 
    '<br>'+ 
    '<div class="outterformbuttons">'+ 
    '<div class="formbuttons">'+ 
     '<button type="button" class="mui-btn mui-btn--raised" >Speichern</button>'+ 
     '<button type="button" class="mui-btn mui-btn--raised">Abbrechen</button>'+ 
     '</div>'+ 
    '</div>'+ 
'</form>'; 

var buttons = modalEl.querySelectorAll('.formbuttons button'); 
buttons[0].addEventListener('click', function() { 
    sendUpdatedGroup(id, 
     document.getElementById('groupName').value, 
     document.getElementById('groupDesc').value)) 
}); 
buttons[i].addEventListener('click', deactivateOverlay); 
+1

Чтобы сделать ваш ответ еще лучше, я бы предложил OP, чтобы они не устанавливали обработчики из атрибутов HTML, они могут просто использовать делегирование событий и устанавливать обработчики событий на 'modalEl' –

+0

@JuanMendes не стесняйтесь редактировать мой ответ. Я поклонник комбинированных ответов :) – Jurik

+0

Далее я бы разделил привязку событий и html. Поэтому я бы просто использовал html и связал события после включения html. – Jurik

0

Вы забыли объявить desc и name взгляд на эту скрипку полностью работает https://jsfiddle.net/L3Lfweh9/

HTML

<div id="message"> 

</div> 

<button id="bttn"> 
click here 
</button> 

JS

var name = "one"; 
var desc = "two"; 
var text = '<form>'+ 
    '<legend>Gruppe bearbeiten</legend>'+ 
    '<div class="mui-textfield">'+ 
     '<input id="groupName" type="text" value="'+name+'">'+ 
     '<label>Gruppenname</label>'+ 
    '</div>'+           
    '<br/>'+ 
    '<div class="mui-textfield">'+ 
     '<textarea id="groupDesc" placeholder="">'+desc+'</textarea>'+ 
     '<label>Beschreibung</label>'+ 
    '</div>'+           
    '<br/>'+ 
    '<div class="mui-textfield">'+ 
    '<label>Geräte hinzufügen</label>'+ 
    '<select id="devicetable" data-placeholder="ID und/oder Namen eingeben" class="chosen-select" multiple style="width:350px;" tabindex="4">'+ 
    '<option value="0"></option>'+ 
    '</select>'+ 
     '</div>'+ 
     '<br>'+ 
     '<div class="outterformbuttons">'+ 
     '<div class="formbuttons">'+ 
      '<button type="button" class="mui-btn mui-btn--raised" onclick="sendUpdatedGroup(id, document.getElementById(&quot;groupName&quot;).value, document.getElementById(&quot;groupDesc&quot;).value)">Speichern</button>'+ 
      '<button type="button" class="mui-btn mui-btn--raised" onclick="deactivateOverlay()">Abbrechen</button>'+ 
      '</div>'+ 
     '</div>'+ 
    '</form>'; 

    document.getElementById("bttn").addEventListener("click", function(){ 
    document.getElementById("message").innerHTML = text; 
    }, false); 
+0

Я этого не делал, я просто не включил весь свой код, так как контекст не был действительно необходим для моего вопроса – Fynn

+0

, и на каком из них был ваш вопрос? – ncubica

+0

Мой вопрос: «Как я могу избежать кавычек внутри моего внутреннего HTTML?». Я думал, что это ясно из проблемы, которую я описал. – Fynn

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