2015-09-04 5 views
-2

Если в функции в OnClick, я говорю:Почему я не могу объединить эти функции JS?

offset=parseFloat(document.getElementById("offsetId").value); //value=-2 
center=sp+offset; // sp is a float == 190 
alert("center="+center); 

я получаю "центр = 190 [объект HTMLInputElement]"

Если я отделить функции:

offset=document.getElementById("offsetId"); 
offset=parseFloat(offset.value); 
center=sp+offset; 
alert("center="+center); 

I получить ту же ошибку.

Но если я сделать это таким образом

offset=document.getElementById("offsetId"); 
center=sp+parseFloat(offset.value); 
alert("center="+center); 

я получить правильный ответ, центр = 188.

Почему я не могу объединить функции, как в первых двух примерах? Они кажутся мне идентичными.

EDIT: Вот пример кода, который производит «невозможные» результаты:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<title> New Document </title> 
</head> 

<body> 
<script>sp=parseFloat(190.); </script> 
<!-- same result with sp=190.; sp=Number(190.); sp=Number("190."); --> 

<form> 
    <p>Enter Offset <input id="offsetId" type="text" name="offset" value=0> <!-- eg -2 --> 
    <p> 
    <input 
    type="button" 
    name="go" 
    value="Do the Plot" 
     onclick=' 
      alert("at19: sp = "+sp+", typeof sp=", typeof sp); 
          // shows: at19: sp = 190, typeof sp= 
      offset=parseFloat(document.getElementById("offsetId").value); 
      alert("at22, offset="+offset+", typeof offset="+typeof offset); 
    // shows: at23, offset=[object HTMLInputElement], typeof offset=object 
      center=sp+offset; 
      alert("at25: center="+center); 
      // shows: at24: center=190[object HTMLInputElement] 

// alternate 1 
      offset = parseFloat(offset.value); 
      center=sp+offset; 
      alert("at31: offset="+offset+", center="+center); 
// shows: at31: offset=[object HTMLInputElement], center=190[object HTMLInputElement] 

// alternate 2 
      offset=document.getElementById("offsetId"); 
      center=sp+parseFloat(offset.value); 
      alert("at37: offset="+offset+", center="+center); 
// shows: at36: offset=[object HTMLInputElement], center=188 
     ' 
     > 
    </form>  
</body> 
</html> 

Обратите внимание, что последний метод дает правильный ответ. Я подозреваю, что я не могу получить sp, чтобы показать тип может быть значительным.

+2

Ни [первые] (https://jsfiddle.net/pdk6L6r4/) или [второй] (https://jsfiddle.net/pdk6L6r4/1/) примеры не производить выход вы утверждаете, что он делает. Невозможно, чтобы 'parseFloat' возвращал HTML-элемент или строку, представляющую элемент HTML, или любое другое значение, которое создавало бы выход в вашем вопросе. Включите рабочий образец, который воспроизводит вашу проблему. Используйте встроенный редактор кода. – meagar

+0

Я приводил пример (теперь полная программа), которая дает выход настолько необычный, что вы утверждаете, что это невозможно, и вы думаете, что его не стоит публиковать? Пожалуйста, просмотрите программу, которую я опубликовал, а также вывод «невозможного» предупреждения. – user1067305

+0

Бремя на вас, чтобы предоставить код, который воспроизводит вашу проблему, и вы ** ** не смогли этого сделать. Теперь, когда вы создали код, который ** делает ** воспроизводит вашу проблему, проблема и решение очевидны. – meagar

ответ

0

Вы не указали свои переменные, поэтому offset - это не то, что вы думаете.

В контексте вашего обработчика событий offset является ссылкой на <input name="offset">, которые уже определены формой.

Если вы собираетесь затенять существующую переменную с локальной переменной с тем же именем, вам необходимо объявить ее с помощью var offset.

<script>sp=parseFloat(190.); </script> 
 
<!-- same result with sp=190.; sp=Number(190.); sp=Number("190."); --> 
 

 
<form> 
 
    <p>Enter Offset <input id="offsetId" type="text" name="offset" value=0> <!-- eg -2 --> 
 
    <p> 
 
    <input 
 
    type="button" 
 
    name="go" 
 
    value="Do the Plot" 
 
     onclick=' 
 
      var offset = parseFloat(document.getElementById("offsetId").value); 
 
      alert("at22, offset="+offset+", typeof offset="+typeof offset); 
 
     ' 
 
     > 
 
    </form> 

Смежные вопросы