2016-11-15 164 views
1

我正尝试使用onclick事件将字符串传递到函数中。但是,当我点击链接时,该函数内的变量不会返回任何内容。它是空的。当我将一个数字作为参数传递并且没有问题显示在警报中时,我没有任何问题。我不确定我做错了什么。当通过onclick函数传递时,包含字符串的变量为空

for (var j=0;j<current_order.length;j++){ 
    var note_id = "note" + (j+1); 
    text = text + "<button onClick= 'deleteItemfromOrder("+j+")'>Delete</button>"; 
    text = text + "<a id = '"+note_id+"' onClick= 'toggleNote("+note_id+")'>Notes</a>"; 
    alert(text); 
} 

这是我试图note_id传递给函数:

function toggleNote(showHideDiv) { 
    alert(showHideDiv); 
} 

我曾尝试多种方法将字符串作为参数传递给函数EG:

text = text + "<a id = '"+note_id+"' onClick= 'toggleNote('"+note_id+"')'>Notes</a>"; 

text = text + "<a id = '"+note_id+"' onClick= 'toggleNote(\'"+note_id+"\;)'>Notes</a>"; 

H无论何时该字符串在函数的另一侧显示为空。有没有问题,如果我通过一些如:

text = text + "<a id = '"+note_id+"' onClick= 'toggleNote("+2+")'>Notes</a>"; 
+0

也可以有人说为什么这已经downvoted? –

回答

1

你的问题是,你错过了引号,数字不用引号中,如

onclick='toggleNote(3)' 

但字符串确实

onclick='toggleNote("string")' 

而且,使用相同的报价将不工作,要么

onclick='toggleNote('string')' 

这意味着你必须做

text = text + "<a id = '"+note_id+"' onClick= 'toggleNote(\""+note_id+"\")'>Notes</a>"; 

但真的是你应该做的,是创建元素

for (var j = 0; j < current_order.length; j++) { 
    (function(i) { 
     var btn = document.createElement('button'); 
     var anc = document.createElement('a'); 

     btn.addEventListener('click', function() { 
      deleteItemfromOrder(i); 
     }); 

     btn.textContent = 'Delete'; 

     anc.addEventListener('click', function() { 
      toggleNote("note" + (i+1)) 
     }); 

     anc.textContent = 'Notes'; 
    })(j); 
} 
+0

或只是引用id,不用担心传递字符串。 – epascarello

+0

这很好。无论我在哪里看,但他们使用单引号和语音标记像javascript中的双引号字符串。我怎么知道何时何地使用不同的和何时使用转义我认为它被称为(这些\ backslashes)。 –

+0

@FKhan - 如果你有一个属性,并且该属性使用单引号,那么它内部的任何内容都必须使用双引号,否则当你添加单引号时该属性是关闭的,并且由于你的字符串是用javascript中的双引号定义的,被转义为不关闭字符串文字。 – adeneo

相关问题