2016-09-26 58 views
0

選擇DIV我有一個事件偵聽器的動態創建的元素:使用jQuery不工作

<script> 
     $(document).on('change', '.inputfile', function() { 
      var name = ($(this).val().split('\\').pop()); 
      selectFile(name); 
     }); 
</script> 

一旦文件被選中,我想追加顯示文件名本身就是一個段落。我的問題是jQuery選擇不工作:

function selectFile(filename) { 
     alert(filename); 
     var classes = $(this).closest('.inputgroup'); 
     $('classes').append('<p>'+filename+'</p>'); 
} 

我想追加與類= inputgroup最近的格段,因爲有好幾個分度,該類。 使用簡單的$('.inputgroup').append('<p>'+filename+'</p>');即可,並創建段落。 這是HTML:

<div class="inputgroup"> 
    <label class="btn btn-default btn-info" style="margin-top: 8px"> 
     Browse <input type="file" style="display: none;" class="inputfile"/> 
    </label> 
    <button type="button" class="btn btn-outline-danger" onclick="myAjax()">Ok</button> 
    <span id="remove_field" class="glyphicon glyphicon-remove" aria-hidden="true" style="vertical-align: middle"></span> 
</div> 
+0

我相信'$(本).closest(」 inputgroup。 ');'超出範圍,在這一點上不應該工作,$(' 這)是文檔。 –

+0

@DIEGOCARRASCAL即使我把它放在事件處理程序中(在HTML文件中)也沒有效果 – slash89mf

+0

jQuery'$(this)'是實例,即生成事件的DOM元素,但它指向此元素只有在事件運行的函數中...所以'$(document).on('change','.inputfile',function(){...}'是你希望爲'$ ).closest('。inputgroup');'因爲在它中'$(this)'是具有'id =「。inputfile」'的元素。 –

回答

5

此行

$('classes').append('<p>'+filename+'</p>'); 

是名爲 「類」 的元素搜索 - 這不是一個有效的HTML元素。

我想你在此基礎上線你的問題的希望

$(this).closest('.inputgroup').append('<p>'+filename+'</p>'); 

我想追加與類最近DIV款= inputgroup

但你應該把它放在事件處理程序中,否則this有不同的含義

$(document).on('change', '.inputfile', function() { 
    var name = ($(this).val().split('\\').pop()); 
    $(this).closest('.inputgroup').append('<p>'+name+'</p>'); 
}); 
0

在這行代碼

var classes = $(this).closest('.inputgroup'); $('classes').append('<p>'+filename+'</p>');

第一行給你一個jQuery對象。你可以直接使用它來追加p標籤。

正如在其他答案中已經提到的,你的第二行尋找一個名稱爲classes的元素,它不存在。

因此,只需使用您擁有的Jquery對象並添加段落即可。像下面

classes.append('<p>'+filename+'</p>');

+0

不工作,已經試過這個代碼但是沒有效果 – slash89mf