HTML: «неопределенный» результат, когда я пытаюсь отобразить шестнадцатеричное значение подписи ECDSA javascript в текстовом поле

#javascript #html #hex

#javascript #HTML #шестнадцатеричное

Вопрос:

Я пытаюсь разработать графический интерфейс для алгоритма ECDSA javascript, используя html для отображения значения подписи нажатием кнопки. К сожалению, значение, которое отображалось в текстовом поле, было «неопределенным» в коде следующим образом:

 const sig = Secp256k1.ecsign(priv, digest);
function sign() {
  var txtOut = document.getElementById("txtOut");
  txtOut = sig;
}
  

HTML:

 <input type="button" Value="click me" onclick="sign()" />
<input type="text" id="txtOut" />
  

Пожалуйста, извините за мой английский. Я не являюсь носителем языка.

Комментарии:

1. Заменить txtOut = sig; на txtOut.value = sig; .

2. Нет необходимости закрывать input /> , используйте: <input ......> .

3. Для кнопки есть тег: <button ....>text</button> .

4. Я не знаю, что Secp256k1.ecsign это такое, но подумайте о том, чтобы переместить его в sign функцию, скажем: function sign() { var txtOut = document.getElementById("txtOut"); txtOut.value = Secp256k1.ecsign(priv, digest); } , или, более подробно: function sign() { document.getElementById("txtOut").value = Secp256k1.ecsign(priv, digest); } , или, прямо в кнопке : <button onclick="document.getElementById('txtOut').value = Secp256k1.ecsign(priv, digest)">click me</button> . Обратите внимание на изменение двойных кавычек на одинарные.

Ответ №1:

Это гораздо лучшая семантика с исполняемой демонстрацией.

Я воссоздал Secp256k1 , priv и digest с немыми значениями.

Я также:

  • я не сопоставил JS с использованием сопоставления HTML, вместо этого я использовал Element.addEventListener метод для привязки события, что позволит уменьшить связь между кодом и пользовательским интерфейсом.
  • submit таким <form /> образом, я могу получить целое form из event .
  • удалите id использование, чтобы оно могло взаимодействовать с любым содержимым DOM и включаться в любом месте.
  • Использовал <button> тег.

 const Secp256k1 = { ecsign: (p, d) => p   d }


const priv = 'XYZ';
const digest = '123';

const sig = Secp256k1.ecsign(priv, digest);

function sign(event) {
  event.preventDefault();
  event.target.result.value = sig;
}

function bindEvents() {
  document.querySelector('form[name="sign"]').addEventListener('submit', sign, true);
}

window.onload = bindEvents;  
 <form name="sign">
  <button>Click me</button>
  <input type="text" name="result" />
</form>  

Ответ №2:

В соответствии с моими комментариями, это может быть то, что вы ищете:

 // Mimicking function
function Secp256k1_ecsign(priv, digest) {
  return "some signature";
}

function sign() {
  document.getElementById("txtOut").value = Secp256k1_ecsign("some priv value", "some digest value");
}  
 <button onclick="sign()">click me</button>
<input id="txtOut">