2016-10-04 4 views
0

у меня есть к этому входу:Заменить входное значение следующего элемента, чтобы охватить

<input type="text" id="my_input" /> 

После того, как пользователь вводит что-либо в входе я должен добавить это рядом с пролетом.

<p id="patient_provider" > 
    <span> 
    Name 
    </span> 
    Sam 
</p> 

Код я использовал (Это должно быть что-то, как показано ниже):

$("#patient_provider").html($('#patient_provider').children()[0]+$('#my_input').val()); 

Но это не работает.

Это показывает что-то вроде:

[object HTMLSpanElement] Sam 

Также обратите внимание:

Есть некоторые CSS реализованы на пролете непосредственно, и я не могу добавить еще один пролет

+1

Почему бы не завернуть "Сэма" в '' и say '$ (" # name "). text ($ (" # my_input "). val());'? – mhodges

+0

Есть некоторые css, реализованные на пролете напрямую, и я не могу добавить еще один диапазон –

+1

Чтобы сказать, что вы не можете изменить свой DOM, потому что ваш CSS просто ленив. Вы создаете намного больше работы для себя, заставляя свою DOM быть определенной структурой, используя элементные и иерархические селекторы в вашем CSS, вместо того, чтобы добавлять класс к диапазону, содержащему «Имя», и сделать вашу структуру DOM независимой от ваших правил CSS и наоборот – mhodges

ответ

2

$('#patient_provider').children()[0] является элементом и преобразуется в [object HTMLSpanElement] строка

справа:

$("#patient_provider").html($('#patient_provider').children()[0].outerHTML+$('#my_input').val()); 
+0

Это то, чего я очень хотел, спасибо :) –

-3

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

0

Если у вас есть возможность изменить разметку, я бы сделал это. Что-то вроде этого - обертывание места, где имя должно появляться в элементе с полезным классом. В этом случае, я пошел с span с классом name:

<input type="text" name="name" id="my_input"> 
<p id="patient_provider" > 
    <span>Name</span> 
    <span class="name">Sam</span> 
</p> 

Затем ваш Javascript может быть улучшена, делая что-то вроде так:

// No-conflict-mode-safe document ready 
jQuery(function($) { 
    // Find the right input based on the name, and bind to keyup 
    $('input[name="name"]).on('keyup', function() { 
     // Put the value of the input into the span.name element 
     $('#patient_provider .name').text($(this).val()); 
    ); 
}); 
+0

Есть некоторые css, реализованные на пролете напрямую, и я не могу добавить еще один диапазон –

+0

Просто потому, что CSS на пролете не означает, что вы не можете изменить разметку. Добавьте любой тег - 'em',' strong' или что-то еще, и поместите его в * этот * элемент. В настоящее время вы делаете это нелегко и создаете для себя множество ограничений и дополнительной работы. –

+0

Я предполагаю, что OP использует либо селектор элементов, либо иерархический селектор, либо адскую комбинацию обоих! что-то вроде '#patient_provider span {...}' – mhodges

0

попробовать это,

HTML

<input type="text" id="my_input" /> 

<p id="patient_provider" > 
    <span> 
    Name: 
    </span> 
    <span class="patient_name"> 
     Sam 
    </span> 
</p> 

JS

var patientName = $(".patient_name").text(); 
var editedName = false; 

$('#my_input').bind('keydown', function(){ 
    if(editedName == false){ 
     $(".patient_name").html($(this).val()); 
     patientName = $(".patient_name").text(); 
     editedName = true; 
    } 
}); 

$('#my_input').bind('keyup', function(){ 
    if(editedName == true){ 
      $(".patient_name").text(patientName + $(this).val()); 
    } 
}); 

JS Fiddle

https://jsfiddle.net/guruling/8afzf4dv/ 
Смежные вопросы