2013-05-07 3 views
0

Я пробовал этот Javascript-код ниже, который позволит мне вставлять разные переменные в html в зависимости от того, что нажато. К сожалению, он не отображает значение переменной, а только показывает имя переменной, как определено ниже.Javascript Help for Innerhtml

<head> 
<script type="text/javascript"> 
var data=new String() 
data="This is what I want to Show" 
function myFunction(text) 
{ 
elem = document.getElementById('replace'); 
elem.innerHTML = text 
} 

</script> 
</head> 

<body> 
<button onclick="myFunction('data')"> Press </button> 

<div id="replace"> 
Test 
</div> 

</body> 
+0

Вы хотите, чтобы «Test» был заменен значением 'button'' Press' или другим. Пожалуйста, дополните. –

+0

Извините, что когда вы нажимаете кнопку, слово «Test» следует заменить на «Это то, что я хочу показать» – user2330961

+0

Заменить с помощью кнопки Agriesean

ответ

0

data присоединен к глобальному window объекта. Для доступа к нему:

elem.innerHTML = window[text]; 

Кроме того, нет необходимости в new String() в виде строк не может быть определена следующим образом:

var data = "This is what I want to Show"; 
0

Если «это то, что вы хотите, чтобы показать», лучше поставить его в аргумент, так что вы можете использовать функцию, если есть несколько кнопок:

<button onclick="myFunction('This is what I want to Show')">Press</button> 

См DEMO.

4

можно передать строку, а не переменной, используйте:

onclick="myFunction(data)" 

Строка должна быть указана переменная (ссылка, в этом случае, в строку) не должен (в противном случае это» будет оцениваться как буквальная строка).

Кстати, JavaScript не требует, чтобы явно создать строку, прежде чем присваивать ей значение, вы можете использовать только:

var data = 'This is what I want to show.'; 

И при использовании innerHTML работы, если все, что вы делаете, это обновление содержание текста (и нет вложенных узлов, которые необходимо учитывать), вы могли бы просто использовать:

function myFunction(text) { 
    // the var declaration prevents the variable becoming global 
    var elem = document.getElementById('replace'); 
    elem.appendChild(document.createTextNode(text)); 
} 

и сделать это в более общем плане, полезно, избежать жесткого кодирования id элемента для изменения внутри функции, а передать его функция:

function myFunction(text, elem) { 
    // testing if the element is a node, if not assume it's a string of the id: 
    var elem = elem.nodeType === 1 ? elem : document.getElementById('replace'); 
    elem.appendChild(document.createTextNode(text)); 
} 

И агрегирование выше:

onclick="myFunction(data, 'replace')" 

Или:

onclick="myFunction(data, document.getElementById('replace'))" 

Я также сильно, советую не использовать в линии/навязчивый JavaScript, просто чтобы упростить обновление функций, вызываемых, аргументов и самих функций, в одном месте (вместо того, чтобы перемещаться по документу и находить каждый экземпляр, в котором вызывается функция):

// define the function here 

var buttons = document.getElementsByTagName('button'), 
    replace = document.getElementById('replace'), 
    data = 'Text I want to show.'; 

for (var i = 0, len = buttons.length; i < len; i++){ 
    buttons[i].onclick = function(){ 
     myFunction(data, replace); 
    }; 
} 
0

Это ваш код ..

<button onclick="myFunction('data')"> Press </button> 

, потому что здесь является строка, а не ссылка на объект 'данные' .. так я думаю, это то, что вы хотите ..
1.

<button onclick="myFunction(data)"> Press </button> 


2. <button onclick="myFunction('This is what I want to Show')"> Press </button>

0

Вы используете переменную текст, чтобы присвоить значение нырять с идентификатором заменить. Используйте это.

elem.innerHTML = data instead elem.innerHTML = text. 

Или передайте аргументы функции без единого qoute.