无法使用Javascript来设置文本

问题描述:

我看到了所有这些例子,但由于某种原因,我的工作不正常。如果在选择列表中选择了某个值,我有一个动态添加的文本框。无法使用Javascript来设置文本

该字段显示的部分正在工作,但我也试图添加一些文本到框中,我无法工作。我还试图使用JS来选择文本,一旦它进入 - 但还没有得到那么多!

这是否有明显的错误?

function showBox() { 
    if (document.getElementById("ctl00_Content_WhereFound").value == "Other" || document.getElementById("ctl00_Content_WhereFound").value == "Friend/Employee Referral") 
    { 
    document.getElementById('ctl00_Content_WhereDetails').style.display = "inline"; 
    if (document.getElementById("ctl00_Content_WhereFound").value == "Other") { 
     document.getElementById('ctl00_Content_WhereDetails').innerHTML += 'Enter Other'; 
    } else { 
     document.getElementById('ctl00_Content_WhereDetails').innerText += "Enter Referral"; 
    } 
    } 
} 
+1

乍一看没有错。也许你可以设置一个显示问题的例子? [jsfiddle](http://www.jsfiddle.net)或[jsbin](http://jsbin.com) – 2010-09-10 14:53:55

+1

'ctl00_Content_WhereDetails'是什么类型的元素?如果它是一个表单字段,你必须使用'value'而不是'innerHTML'或'innerText'。 (因为它破坏并重新解析任何元素内容,所以'innerText'在任何情况下都应该避免使用IE-only和'innerHTML + =')。 – bobince 2010-09-10 15:09:12

+0

@bobince - 它是一个asp.net文本框 - 你看到的名字是由.NET创建的 – tpow 2010-09-10 15:13:51

试试这个..

function showBox() 
{ 
    $Found = document.getElementById("ctl00_Content_WhereFound"); 
    $Where = document.getElementById('ctl00_Content_WhereDetails'); 

    if($Found.value == "Other" || $Found.value == "Friend/Employee Referral") 
    { 
     $Where.style.display = "inline"; 
     if($Where.value == "Other") 
     { 
      $Where.value = 'Enter Other'; 
     }else 
     { 
      $Where.value = "Enter Referral"; 
     } 
    } 
} 

您可以随时指定元素变量,以缩短码。

+0

@RoberPitt - 第二如果应该阅读“如果($ found.value ==”其他“),但+1给你提供正确的答案和清理我的蹩脚的代码!:) – tpow 2010-09-10 15:22:34

+0

它不蹩脚,它的事实你还有更多需要学习的东西,我的代码可能对其他成员很糟糕:) – RobertPitt 2010-09-10 15:27:17

这看起来像你试图对Asp.Net呈现的控件进行更改。确保您的控件的实际编号格式正确。通常,UniqueID格式为ctl00_Content_WhereFound,但ClientID格式为ctl00$Content$WhereFound

+0

'id'用下划线呈现,'name'用$ – lincolnk 2010-09-10 14:58:45

我注意到的第一件事是您在if子句中使用了'innerHTML',在else子句中使用了'innerText'。这是故意的吗?他们做不同的事情......

这是一个痛苦,但它可能是值得使用document.createElement()等功能来建立/修改动态内容。

我遇到过类似的问题......一般来说,使用DOM函数而不是innerHTML通常会修复它,尽管它明显更加冗长。 JQuery有一些非常有用的功能。

+0

呈现我在尝试不同的事情,看看我是否可以得到要么工作。 – tpow 2010-09-10 15:13:02

innerText至少不支持Firefox。在这两种情况下你有没有理由不能使用innerHTML

此外,您可能希望存储元素的引用,使你的代码更清洁和更快速:

function showBox() { 
    var eFound = document.getElementById("ctl00_Content_WhereFound"); 
    if (eFound.value == "Other" || eFound.value == "Friend/Employee Referral") 
    { 
    var eDetails = document.getElementById('ctl00_Content_WhereDetails'); 
    eDetails.style.display = "inline"; 
    if (eFound.value == "Other") { 
     eDetails.innerHTML += 'Enter Other'; 
    } else { 
     eDetails.innerHTML += "Enter Referral"; 
    } 
    } 
}