2016-06-15 3 views
-1

나는 지금 아주 나쁜 "인용 상황"이 있습니다. 나는 innerHTML을 내부에서 작업하고이 안에 난 다음 날 나뭇잎 온 클릭 이벤트에 함수를 호출 할 :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

내가 자바 스크립트에서 그 많은 HTML 쓰기 wouldnt가 작동 선언 깜빡하고, 대신 Handlebars와 같은 템플릿 형식을 사용하십시오. HTML을 페이지의 일부로 표시하지만 표시하지 않은 다음로드하여 사용하십시오. 하지만 적어도 클래스에 버튼을 할당 한 다음 해당 클래스에 대한 클릭 이벤트 핸들러를 작성하여 필요한 작업을 수행합니다. –

+0

JavaScript 문자열 내에 코드를 작성하는 것 이외에 문제가 무엇인지 설명하는 것을 잊어 버린 것 같습니다. –

답변

2

작은 따옴표를 HTML 인코딩하는 대신 JavaString이 작은 따옴표를 이스케이프 처리합니다. HTML 속성으로

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

당신이 탈출 지옥에 도착하지 않으려면

는 (우리는 약 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

답을 더 잘하기 위해, 나는 HTML 애트리뷰트에서 핸들러를 설정하지 않았 음을 제안했다. 그냥 modalEl에 이벤트 위임을 설정하고 이벤트 핸들러를 설정할 수있다. –

+0

@JuanMendes는 내 대답을 자유롭게 편집 할 수있다. 나는 결합 된 대답의 팬이다. – Jurik

+0

나는 또한 이벤트 바인딩과 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

제 질문은 : "내 innerHTML 안에 인용 부호를 어떻게 피할 수 있니?". 나는 내가 설명한 문제에서 분명하다고 생각했다. – Fynn

관련 문제