2015-02-10 3 views
0

Это то, что я хочу сделать: щелкнув по кнопке, создайте элемент «p», дайте ему идентификатор, добавьте его в родительский div, затем возьмите значение поля ввода и добавьте его к «innerHTML» вновь созданный элемент «p». Пожалуйста помоги!Как принять входное значение и добавить его в новый элемент?

HTML:

<div id="main_container"> 
    <h1 class="hero">TITLE</h1> 
    <div id="content_container"> 
     <form id="form"> 
      <label id="create_name">Create a username:</label> 
      <input id="input1"></input> 
      <button id="usr_btn">button</button> 
     </form> 
    </div> 
</div> 

ЯШ:

$('#usr_btn').on('click', function (e) { 
    if ($('#input1').val() != null) { 
     e.preventDefault(); 
     var userName = document.createElement('p'); 
     userName.id = 'name_created'; 
     $('#name_created').append($('#content_container')); 
     $('#name_created').append($('#input1').val()); 
    } 
}); 
+0

Я могу видеть отличные ответы, но одна вещь, которую вы хотите добавить, - это что-то, что позволяет создать уникальный идентификатор 'id', чтобы гарантировать, что идентификатор не дублируется или не имеет места, чтобы остановить пользователя от отправки одно и то же имя пользователя более одного раза. Это может вызвать проблемы позже в зависимости от того, для чего вам нужен идентификатор 'id'. – NewToJS

+0

Мне нужно посмотреть, как это сделать, спасибо за головы. –

+0

Один из способов сделать это - иметь переменную со значением 0, каждый раз, когда функция запускает +1 вашей переменной и помещает ее в идентификатор, пример 'var step = 0;' Внутри вашего места функции 'step ++ ; 'для атрибута id есть' 'some_name" + step' – NewToJS

ответ

1

Я хотел бы предложить:

//Declare the step variable 
var step=0; 
$('#usr_btn').on('click', function (e) { 
     if ($('#input1').val() != null) { 
      e.preventDefault(); 
      //Increment ID's to make them unique 
      step++; 
      // using jQuery to create a <p> element, with 
      // an id of 'name_created', and using 
      // the 'text' property to set the textContent 
      // of the element: 
      var userName = $('<p>', { 
       'id' : 'name_created'+step, 
       'text' : $('#input1').val() 
      // appending the created element t '#content_container': 
      }).appendTo('#content_container'); 
     } 
    }); 

Одна из проблем в собственном публикуемую кода является то, что линии:

$('#name_created').append($('#content_container')); 

добавляет элемент, идентифицированный его id из «content_container» к созданному элементу , в то время как ваш вопрос предполагает, что вы хотите добавить созданный элемент в элемент #content_container.

Ссылки:

+0

Хорошо, это решает его и спасибо за подсказку на append() vs appendTo() Я получал эти путаницы. –

+0

Ты очень рад, я рад, что помог; вероятно, легче держать их прямо для тех из нас, кто говорит по-английски как их основной (или только) язык; но если метод jQuery, похоже, не делает того, что ему нужно, всегда стоит пересмотреть документацию (по-видимому, у него действительно есть лучшая документация по API любой библиотеки или языка, с которыми я работал, хотя и ограниченный). –

+0

@DavidThomas Надеюсь, вы не против, но мне очень нравится этот ответ, но мне хотелось добавить уникальные идентификаторы, поскольку идентификаторы не должны использоваться более одного раза. Это отвечает на вопрос с/без дублирования id, но я не видел много точек в сообщениях нового ответа, тогда у вас его есть. – NewToJS

0

Нечто подобное (в том числе проверку, чтобы убедиться, что вы не дублировать идентификаторы - что недопустимо в HTML):

$('#usr_btn').on('click', function(e) { 
 
    if ($('#input1').val() != null) { 
 
    var user = $('#input1').val(); 
 
    var count = $('#' + user).length; 
 
    if (count == 0) { 
 
     $('#content_container').append("<p id=" + user + ">" + user + "</p>"); 
 
    } else { 
 
     alert("User is already there!"); 
 
    } 
 

 

 
    } 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="main_container"> 
 
    <h1 class="hero">TITLE</h1> 
 
    <div id="content_container"> 
 
    <form id="form"> 
 
     <label id="create_name">Create a username:</label> 
 
     <input id="input1"></input> 
 
     <button id="usr_btn">button</button> 
 
    </form> 
 
    </div> 
 
</div>

0

Проблема с вашим кодом заключается в том, что селектор jQuery не найдет вновь созданный элемент #name_created, поскольку он не является частью DOM. Попробуйте это:

$('#usr_btn').on('click', function (e) { 
 
    e.preventDefault(); 
 
    if ($('#input1').val() != '') { 
 
     $('<p />', { id: 'name_created', text: $('#input1').val() }).appendTo('#content_container'); 
 
    } 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="main_container"> 
 
    <h1 class="hero">TITLE</h1> 
 
    <div id="content_container"> 
 
     <form id="form"> 
 
      <label id="create_name">Create a username:</label> 
 
      <input id="input1" /> 
 
      <button id="usr_btn">button</button> 
 
     </form> 
 
    </div> 
 
</div>

Этот код создает новый p тег применяет значения для text и id к нему, затем присоединяет его к #content_container. Обратите внимание, что при повторном нажатии кнопки ваш код может содержать дубликаты атрибутов id. Возможно, вам лучше сменить id на class.

+0

Я получаю 'Uncaught SyntaxError: Неожиданный токен =' –

+0

@MarkusHallcyon мой плохой, опечатка. Обновленный ответ –