我在Javascript中动态创建了“input”元素,并将“insertAfter”附加到已经创建的“div”。这些“输入”显示但我无法逐步获取或更改其值,我将需要稍后使用。
为目录中的每个文件添加“输入”元素,并且使用“加”和“减”按钮来获取和更改输入值,但是当我尝试获取值时,我得到此错误
Uncaught TypeError: Cannot read property 'value' of null
使用的基本代码片段如下所示:
使用Javascript:
$.ajax({
url: "http://localhost:8888/file",
success: function(data){
var filename = this.href.replace(window.location.host, "").replace("http://", "").replace("/","").replace(".csv", "");$(data).find("a:contains(" + fileextension + ")").each(function () {
if(counter == 0){
$('<div class="col-md-3 ' + counter + '"></div>').appendTo('#stock_types');
$('<a href = "#" onclick="return false; onclick=removing();" class = "is_stock"> </a>').html(filename).appendTo('.'+ counter).attr('id', filename);
$('<button type="button" onclick="adding()" class = "btn btn-default plus_"> + </button>').insertAfter($( "#" + filename )).attr('id','plus_'+filename);
$('<input class = "stock_amount" name="input_' + filename + '" id = input_'+ filename +' value = "0" ">').insertAfter($( "#plus_" + filename ));
$('<button type="button" onclick="subtracting()" class = "btn btn-default minus_"> - </button>').insertAfter($( '#input_' + filename)).attr('id','minus_'+filename);
function adding(){
raw_id = '';
raw_id = raw_id + $(this).attr('id');
var new_id = raw_id.replace("plus", "input");
console.log(new_id);
current_val = document.getElementById(new_id).value;
current_val = current_val + 1;
console.log(current_val);
};
我的最终目标是获取并递增动态创建的输入值。提前谢谢。
答案 0 :(得分:1)
$(this).attr('id')
这不起作用,因为该函数尚未附加到任何对象(因此this
将返回undefined
)。您可以将所需元素作为参数传递给函数。你可以这样做:
$('<button type="button" onclick="adding(document.querySelector('.stock_amount')[0])" class = "btn btn-default plus_"> + </button>').insertAfter($( "#" + filename )).attr('id','plus_'+filename);
并在添加功能中:
function adding(input){
raw_id = '';
raw_id = raw_id + $(input).attr('id');
...
}
答案 1 :(得分:1)
jQuery支持开箱即用的动态元素。
不需要具有onclick
属性等的vanilla js ......
var btn = $('<button>', {
text: ' + ',
'class':'btn btn-default plus'
});
function adding(event){
// adding...
}
btn.on('click', adding).insertAfter($('.....whatever'));