2011-05-20 60 views
-1

我试图在javascript中进行一些字符串比较。我看过几个教程和示例,但它们似乎不起作用。我错过了一些基本的东西?检测选项值的代码不能按预期工作

尝试1

function addAspect(aspect) { 
    var print = document.createElement('p'); 
    var ptext; 

    if (aspect == "Option1") ptext = document.createTextNode("This is option1"); 
} 

不工作。

然后我发现这个例子中,这是所有的读者说,它工作得很好

function addAspect() { 
    var print = document.createElement('p'); 
    var ptext; 

    var aspect = String(document.getElementById("aspectResult").value); 

    if (aspect == "Option1") ptext = document.createTextNode("This is option1"); 
} 

不工作。

我也试过.toString()以及'==='完全匹配比较。

的完整代码

<html> 
    <head> 
    <script type="text/javascript"> 
     function addAspect() 
     { 
      var print = document.createElement('p'); 
      var ptext; 
      var aspect = document.getElementById("aspectResult").value; 
      if (aspect == "Option1"){ 
       ptext = document.createTextNode("This is option1"); 
      } 
      print.appendChild(ptext); 
      document.getElementById("mainBlock").appendChild(print); 
     } 
     </script> 
    </head> 
    <body> 
     <form> 
      <select id="aspectResult"> 
       <option value="Option1">Option1</option> 
      </select> 
      <input type="button" value="Check" onclick="addAspect()"/> 
     </form> 
     <span id="mainBlock">&nbsp</span> 
    </body> 
</html> 

有什么建议?

+0

你可以显示aspectResult的html吗? – 2011-05-20 09:50:51

+0

在if语句前面的行上做一个警报,并查看弹出窗口中的内容 - alert(aspect); – Andrew 2011-05-20 09:52:20

+0

<选择ID =“aspectResult”><选项值=“选项1”>选项1 - 一个选项,以便不能混淆。它在

元素中。谢谢。 U. – urema 2011-05-20 09:53:13

回答

0

你的函数创建了一个文本节点,但是它什么都没做,所以你的代码出现什么都不做。您需要将文本节点的地方附加到一个元素在DOM:出现在IE9,火狐4和Chrome 11是工作的罚款见http://jsbin.com/ekura5/

document.body.appendChild(ptext); 

你的全部代码。

+0

我已经这样做了,我只是没有告诉你这个部分。我已经将它正确地添加到身体 - 我已经用随机字符串测试了这部分代码,而不是元素的值 – urema 2011-05-20 09:59:31

+0

@user:你应该粘贴你的完整代码 - 很明显在这一点上没有什么错到目前为止发布的代码。 – 2011-05-20 10:02:32

+0

完整代码(我不能回答我的问题) <脚本类型= “文本/ JavaScript的”> 功能addAspect(){ VAR打印=使用document.createElement( 'P'); var ptext; var aspect = document.getElementById(“aspectResult”).value; if(aspect ==“Option1”)ptext = document.createTextNode(“This is option1”); } <选择ID = “aspectResult”> <选项值= “选项1”>选项1 &NBSP urema 2011-05-20 10:11:37

0

if (/option1/i.test(aspect))会为你工作吗?如果不是,可能只是aspect的值不是'Option1'。此外,你必须追加/插入elment到DOM:

print.appendChild(ptext); 
document.body.appendChild(print); 
0

如果您正试图将ptext添加到款,你需要两行添加到末尾:

function addAspect(aspect) { 
    var prnt = document.createElement('p'); 
    var ptext; 
    if(aspect == "Option1") { 
     ptext = document.createTextNode("This is option1"); 
     prnt.appendChild(ptext); // Add the text to the paragraph 
     document.body.appendChild(prnt); // Add the paragraph to the document 
    } 
} 
+0

'print'既不是ECMAScript中的保留字,也不是* future保留字*。 – 2011-05-20 10:01:16

+0

如果您阅读上面我已经有这个代码..谢谢 – urema 2011-05-20 10:04:06

+1

@安迪E:道歉,更正。 “打印”在某些环境中使用,然而(它也绊住语法荧光笔),所以可能更安全以避免它。 – 2011-05-20 10:05:37

1

第一,小介绍了如何下拉菜单工作:

<select id="aspectResult"> 
    <option value="Option1">Option1</option> 
</select> 

要阅读从下拉列表中选择的值,你应该这样做:

var dropdown = document.getElementById('aspectResult'), 
selectedValue = dropdown.options[dropdown.selectedIndex].value; 

然后,创建一个内部有文本节点<p>元素:

var p = document.createElement('p'), 
txt; 

if (selectedValue == 'Option1') { 
    txt = document.createTextNode('This is option 1'); 
} 

之后,可以追加新创建的段落到您选择的容器:

var container = document.getElementById('mainBlock'); 

if (txt) { 
    p.appendChild(txt); 
    container.appendChild(p); 
} 

All together now!