2016-03-14 2 views
0

Я пытаюсь использовать .on(), чтобы добавить текстовое поле при щелчке динамически созданной кнопки. Однако по какой-то причине я не могу заставить ее работать. Кто-нибудь видит, что случилось? Спасибо за любую помощь и извините, если это что-то очевидное (я боюсь, что это может быть, но я просто не вижу этого).Проблемы с JQuery .on()

$('#the-basics input.typeahead').keyup(function() { 
 
    var prs = $(this).val().split(' '); 
 
    if (!$("#the-basics span.newEntityButtons").length) { 
 
    var $newEntity = $('<span class="newEntityButtons">' + '</span>'); 
 
    $newEntity.appendTo($("#the-basics")); 
 
    var $newPerson = $('<input type="button" value="New Person" id="addpersonbutton" class="newHolder newPerson" />'); 
 
    $newPerson.appendTo($("span.newEntityButtons")); 
 
    } 
 
}); 
 

 
$('div#example').on('click', '#addpersonbutton', function() { 
 
    var epo = new Date().getTime(); 
 
    var theelement = '<span class="nested-fields person">' + 
 
    '<input id="stockholder_people_attributes_' + epo + '_fname" name="stockholder[people_attributes][' + epo + '][fname]" value="' + prs[0] + '">' + 
 
    '<a class="glyphicon glyphicon-trash remove_fields existing" href="#"></a>' + 
 
    '</span>'; 
 
    $('div.new_person.new_fields').prepend(theelement); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="example"> 
 
    <div id="the-basics"> 
 
    <input class="typeahead"> 
 
    </div> 
 
    <div class="new_person new_fields"> 
 
    </div> 
 
</div>

+2

удалить хэш из идентификатора 'ид = "addpersonbutton"' вместо 'ид = "# addpersonbutton"' – jcubic

+1

согласен с @jcubic, также убедитесь, этот идентификатор не должен быть одинаковым для нескольких элементов. Это нарушит ваш код jquery для обработки событий с помощью ids. 'id =" # addpersonbutton "изменить эту строку так, чтобы идентификатор был уникальным все время. –

+0

@jcubic хороший улов; к сожалению, есть что-то еще неправильное: -P – neanderslob

ответ

1

Удалить # от кнопку New Personid.

var $newPerson = $('<input type="button" value="New Person" id="addpersonbutton" class="newHolder newPerson" />'); 

Объявить prs вне события щелчка, как следующее.

var prs; 

$('#the-basics input.typeahead').keyup(function() { 
    prs = $(this).val().split(' '); 
    if (!$("#the-basics span.newEntityButtons").length) { 
     var $newEntity = $('<span class="newEntityButtons">' + '</span>'); 
     $newEntity.appendTo($("#the-basics")); 
     var $newPerson = $('<input type="button" value="New Person" id="addpersonbutton" class="newHolder newPerson" />'); 
     $newPerson.appendTo($("span.newEntityButtons")); 
    } 
}); 
+0

Хороший улов, но, видимо, что-то не так :-P – neanderslob

+0

Это не работает Azim. Можешь попробовать. Я пытался, чтобы –

+1

не помешало переместить его в глобальную область. он может просто повторить его как локальную переменную снова во второй функции – llamerr

1
var prs = $(this).val().split(' '); 

не является глобальной переменной, и недоступна внутри $('div#example').on('click', '#addpersonbutton', function() { так дублировать его внутри второй функции

EDIT: чтобы было ясно:

$('#the-basics input.typeahead').keyup(function() { 
    var prs = $(this).val().split(' '); 
    if (!$("#the-basics span.newEntityButtons").length) { 
     var $newEntity = $('<span class="newEntityButtons">' + '</span>'); 
     $newEntity.appendTo($("#the-basics")); 
     var $newPerson = $('<input type="button" value="New Person" id="addpersonbutton" class="newHolder newPerson" />'); 
     $newPerson.appendTo($("span.newEntityButtons")); 
    } 
}); 

$('div#example').on('click', '#addpersonbutton', function() { 
    var prs = $(this).val().split(' '); 
    var epo = new Date().getTime(); 
    var theelement = '<span class="nested-fields person">' + 
     '<input id="stockholder_people_attributes_' + epo + '_fname" name="stockholder[people_attributes][' + epo + '][fname]" value="' + prs[0] + '">' + 
     '<a class="glyphicon glyphicon-trash remove_fields existing" href="#"></a>' + 
     '</span>'; 
    $('div.new_person.new_fields').prepend(theelement); 
}); 
2

Изменения Я сделал

► Объявленная переменная prs как глобальная переменная

► Удалить # с идентификатора кнопки New Person.

Рабочая Демонстрационный

var prs = ''; 
 
$('#the-basics input.typeahead').keyup(function() { 
 
    prs = $(this).val().split(' '); 
 
    if (!$("#the-basics span.newEntityButtons").length) { 
 
    var $newEntity = $('<span class="newEntityButtons">' + '</span>'); 
 
    $newEntity.appendTo($("#the-basics")); 
 
    var $newPerson = $('<input type="button" value="New Person" id="addpersonbutton" class="newHolder newPerson" />'); 
 
    $newPerson.appendTo($("span.newEntityButtons")); 
 
    } 
 
}); 
 

 
$('div#example').on('click', '#addpersonbutton', function() { 
 
    var epo = new Date().getTime(); 
 
    var theelement = '<span class="nested-fields person">' + 
 
    '<input id="stockholder_people_attributes_' + epo + '_fname" name="stockholder[people_attributes][' + epo + '][fname]" value="' + prs[0] + '">' + 
 
    '<a class="glyphicon glyphicon-trash remove_fields existing" href="#"></a>' + 
 
    '</span>'; 
 
    $('div.new_person.new_fields').prepend(theelement); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="example"> 
 
    <div id="the-basics"> 
 
    <input class="typeahead"> 
 
    </div> 
 
    <div class="new_person new_fields"> 
 
    </div> 
 
</div>

+0

не очень хорошая идея переместить его в глобальную область. он может просто повторить его как локальную переменную снова во второй функции – llamerr

+0

@llamerr. Это не будет повторяться, так как оно не объявляется повторно. –

+0

Я знаю, что он не будет дублироваться, так как он находится в глобальном масштабе. вот почему я написал, что лучше дублировать декларацию локально так же, как и раньше (что я на самом деле имею в виду, извините, если неясно) – llamerr

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