0

我在 JavaScript 函数中有一个 JavaScript 函数。div下面的 JavaScript 在using中插入一些 HTML getElementbyID

它正在传递一个变量,好吧——这似乎是一个对象的子对象,this.value--btw,我是一个 JavaScript 新手,但是,当我尝试给它另一个变量来传递时,l它所代表的字符串停止工作。下面type 1尝试传递变量l不起作用,否则。我也刚刚尝试过推杆l '+,但没有奏效。任何人都可以帮助我使用正确的语法来传递变量吗?谢谢你。

if (type==1)
  {
  var mailbox = '<form action="mail.php" method="post"><input type="text" onkeyup="showResult(this.value,'+l+')"><input type="submit" name="submit" value="Email"><div id="livesearch"></div></form>';
  }
else
  {
  var mailbox = '<form action="share.php" method="post"><input type="text" onkeyup="showResult(this.value)"> Share<div id="livesearch"></div></form>';
  } 
document.getElementById(target).innerHTML = mailbox;
return false;
}
4

2 回答 2

3

如果字符串包含"Check this out."双引号,这就是生成的 HTML 标记的样子(添加了格式):

<form action="mail.php" method="post">
  <input type="text" onkeyup="showResult(this.value,"Check this out.")">
  <input type="submit" name="submit" value="Email">
  <div id="livesearch"></div>
</form>

请注意 的属性值如何onkeyup包含 a ",这将关闭该属性,从而导致无效的 HTML。如果字符串包含Check this out.没有任何引号,则最终结果仍然无效,原因有:

<form action="mail.php" method="post">
  <input type="text" onkeyup="showResult(this.value,Check this out.)">
  <input type="submit" name="submit" value="Email">
  <div id="livesearch"></div>
</form>

在这种情况下,showResult(this.value,Check this out.)是事件处理程序 JavaScript,并且有语法错误。您想要的是将字符串放在单引号中,这样它就不会破坏属性,因此它是有效的 JavaScript:

var mailbox = '<form action="mail.php" method="post"><input type="text" onkeyup="showResult(this.value,\''+l+'\')"><input type="submit" name="submit" value="Email"><div id="livesearch"></div></form>';

请注意,不建议以这种方式附加事件,因为很容易犯这种类型的错误。相反,将事件处理程序分配给 DOM 元素,而不是 HTML:

var mailboxHtml;
var keyUpHandler;
if (type==1)
{
    mailboxHtml = '<form action="mail.php" method="post"><input type="text" id="search"><input type="submit" name="submit" value="Email"><div id="livesearch"></div></form>';
    keyUpHandler = function() { showResult(this.value, l); };
}
else
{
    mailboxHtml = '<form action="share.php" method="post"><input type="text" id="search"> Share<div id="livesearch"></div></form>';
    keyUpHandler = function() { showResult(this.value); };
} 

document.getElementById(target).innerHTML = mailbox;
document.getElementById('search').onkeyup = keyUpHandler;

return false;
于 2012-06-08T19:41:50.677 回答
0

如果l是字符串,则需要使其看起来像呈现代码中的字符串。

您可以使用JSON.stringify()它(实际上是任何类型的变量,包括对象!)。

'..... onkeyup="showResult(this.value,'+JSON.stringify(l)+');" .....'
于 2012-06-08T19:29:17.723 回答