Как сохранить значение в виде строки из текстового ввода с помощью javascript

#javascript #jquery #html #textbox

#javascript #jquery #HTML #текстовое поле

Вопрос:

Что я пытаюсь сделать, так это сохранить некоторые пользовательские данные из текстового поля html в переменную JS, а затем по нажатию кнопки поместить этот текст в iframe.

Извлечение информации из текстового поля с помощью jQuery не является проблемой, поскольку я могу консольный журнал ‘$(‘#userinput’).val()’ который возвращает значение, но затем сохраняет его в переменную, похоже, возвращает пустую строку.

Это мой код, который использует как jQuery, так и ваниль для попытки сохранить строку:

 $(document).ready(function () {

    $result = $('#userinput').val();
    var output = document.getElementById('userinput').value;
    var iframe = document.getElementById('iframe');

    doc = iframe.contentDocument;
    doc.open();
    doc.write("test");
    doc.close();

    $('#btn_run').click(function () {
        console.log($('#userinput').val());
        console.log(output);
        console.log($result);
        doc.open();
        doc.write(output);
        doc.close();
    });
});
 

И HTML:

 <input type="text" id="userinput">
    <iframe id="iframe"></iframe>
    <button id="btn_run">Run</button>
 

Запутался.

Любая помощь приветствуется 🙂

Ответ №1:

Вам нужно получить значение #userinput в вашем прослушивателе событий. Это связано с тем, что строки являются примитивным значением и не передаются по ссылке. Поэтому, когда вы используете .value , вы получаете значение во время вызова. Когда вы выполняли обратный вызов, вы получили значение пустой строки, поскольку входные данные были пустыми, когда значение сохранялось в output переменной.

Фрагмент здесь не будет работать из-за iframe.

 $(document).ready(function() {

  $result = $('#userinput').val();
  
  var iframe = document.getElementById('iframe');

  doc = iframe.contentDocument;
  doc.open();
  doc.write("test");
  doc.close();

  $('#btn_run').click(function() {
    console.log($('#userinput').val());
    var output = document.getElementById('userinput').value;
    console.log(output);
    console.log($result);
    doc.open();
    doc.write(output);
    doc.close();
  });
}); 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" id="userinput">

<iframe id="iframe"></iframe>

<button id="btn_run">Run</button> 

Ответ №2:

когда вы инициализируете значение output в строке 4, пользовательский ввод по-прежнему отсутствует, поэтому output == "" . Это значение никогда не обновляется в вашем коде, поэтому при вызове doc.write(output) вы, по сути, работаете doc.write("") .

 <input type="text" id="userinput">
<button id="btn_run">Run</button>
<iframe id="iframe"></iframe>

<script type="text/javascript">
$( document ).ready(function() {

  var doc = iframe.contentDocument;

  $('#btn_run').click(function(){
    doc.open();
    doc.write(document.getElementById('userinput').value);
    doc.close();
  });
});
</script>
 

Таким образом, значение определяется при необходимости. В этом простом случае нет причин определять переменную.

вам даже не нужен jQuery для этого

 <input type="text" id="userinput">
<button id="btn_run">Run</button>
<iframe id="iframe"></iframe>

<script type="text/javascript">      
  var doc = iframe.contentDocument;

  function writeToIframe() {
    doc.open();
    doc.write(document.getElementById('userinput').value);
    doc.close();
  }

  document.getElementById('btn_run').addEventListener('click', writeToIframe); 

</script>
 

Ответ №3:

вы снова удлиняете свой код, по-прежнему используя $(‘#userinput’).val() вместо $result после вашего объявления. Закройте свой входной тег