2015-07-04 1 views
3

Я новичок в кодировании и сталкиваюсь с проблемой вызова функции из innerhtml. Я подозреваю, что проблема может быть связана с синтаксисом innerhtml. Проблемный раздел:Переменная ошибка в функции, вызываемой в InnerHTML

document.getElementById('arrowback').innerHTML = "<a href='#' onclick='return imtest(icount,imname);'><img src=/Images/ib/A2.png></a>"; 

Если я изменить синтаксис для ниже, то он работает на icount, что числовое значение, а не для imname:

document.getElementById('arrowback').innerHTML = "<a href='#' onclick='return imtest("+icount+");'><img src=/Images/ib/A2.png></a>"; 

Я хотел бы назвать функция imtest с 2 переменными через метод innerhtml. Ниже приведен полный код для справки:

<script type="text/javascript"> 
    function clicker(buildname, imname, icount){ 
     var displaybox=document.getElementById('displaybox'); 

     if (displaybox.style.display === "none") { 
      alert(imname); 

      document.getElementById('imagebox').innerHTML = "<img src=" + imname + icount+".jpg height='400'>"; 
      document.getElementById('arrowback').innerHTML = "<a href='#' onclick= 'return imtest(icount,imname);'><img src=/Images/ib/A2.png></a>"; 
      document.getElementById('btitle').innerHTML = buildname; 
     } else { 
      document.getElementById('displaybox').style.display = "none"; 
     } 
     return false; 
    } 

    function imtest(icount, imname) { 
     alert(icount); 
    } 
</script> 

ответ

1

Рабочий код ...

Javascript

function imtest(icount, imname){ 
    alert("icount:" + icount + "\n imname: " + imname); 
} 
function clicker(buildname,imname,icount){ 

var displaybox=document.getElementById('displaybox'); 

if(displaybox.style.display == "none"){ 
    displaybox.style.display = "block"; 
    document.getElementById('imagebox').innerHTML = "<img src='" + imname + icount+".jpg' height='400'>"; 
    document.getElementById('arrowback').innerHTML = "<a onclick='return imtest(" + icount + "," + '"' + imname + '"' + ");'><img src='Images/ib/A2.png'></a>"; 
    document.getElementById('btitle').innerHTML = buildname; 

}else{ 
    document.getElementById('displaybox').style.display = "none"; 
} 
} 

HTML

<div id="displaybox" style="display: none;"> 
    <h1 id="btitle"></h1> 
    <div id="imagebox"></div> 
    <div id="arrowback"></div> 
</div> 
<button onclick="clicker('buildname', 'imname', 'icount');">Clicker</button> 
+0

Раздел, который не работает, это onclick = 'return imtest ("+ icount +", "+ imname +"), он не вызывает функцию imtest, которая должна давать базовый предупреждение при вызове .. – 1dxb

+0

вы можете добавить ** HTML ** код – Malik

+0

Я отредактировал код, попробуйте сейчас ... – Malik

3

Вам просто нужно добавить кавычки imname:

document.getElementById('imagebox').innerHTML = '<img src="' + imname + icount + '.jpg" height="400">'; 
document.getElementById('arrowback').innerHTML = '<a href="#" onclick="return imtest(' + icount + ', \"' + imname + '\");"><img src="/Images/ib/A2.png"></a>'; 

Кстати, вы забыли кавычки вокруг обоих src значений атрибутов, я добавил их , и я взял на себя смелость изменить кавычки, которые вы используете, чтобы иметь двойные кавычки в вашем HTML.

См. this codepen.

+0

imname уже переменная. почему нам нужны кавычки вокруг него .. – Vinay

+0

Посмотрите на результат присваивания вместо 'document.getElementById ('arrowback'). innerHTML = '';' - do 'console.log ('';)' - тогда посмотрите, можете ли вы понять, почему вам нужны кавычки на выход консоли –

+0

Потому что, когда вы выводите его, он печатается в HTML. Скажем, 'var iname = 'abc''. В введенном HTML это теперь 'myFunction (abc)'. Когда он оценивается, он пытается найти переменную «abc», которой не существует. В то время как с кавычками вокруг него ('myFunction (" abc ")'), теперь у него есть строка в качестве аргумента. – Jerska

0

В функции imtest вы передаете только один параметр и на onclick вы принимаете два параметра. Обратите внимание: Принимая, вы должны писать вот так.

document.getElementById('arrowback').innerHTML = '<a href="#" onclick="return imtest(' + icount + ', \"' + imname + '\"');"><img src="/Images/ib/A2.png"></a>'; 
+0

спасибо, что я изменил функцию imtest, чтобы принять 2 параметра и внесла изменения в строку doublebackhbackbackbackback, однако imtest по-прежнему не вызван. – 1dxb

+0

проверить это с помощью этого .. ("+ icount +", "+ imname +"); – Maheshvirus

+0

выше не работает с imname, он отлично работает с icount. imname - это строковая переменная, которая представляет собой путь изображения, – 1dxb