2017-05-16 34 views
0

私は多くのラベルと1つの入力ファイルを持っています。jquery:ボタンをクリックしたラベルを取得する方法は?

<label for="uploadFile" data-albumid="1">upload Here</label> 
<label for="uploadFile" data-albumid="2">upload Here</label> 
<label for="uploadFile" data-albumid="3">upload Here</label> 
<input id="uploadFile" type="file" style="display:hidden"> 
$('#uploadFile').on('change', function(e) { 
// how to get the albumid data here ? 
}); 
+0

の可能性のある重複[データ-id属性を取得する方法?](http://stackoverflow.com/questions/5309926/how-to-get-the-data-id -attribute) –

答えて

0

ラベルのクリックハンドラを入れて、それが.data()を使用してinput要素に選択肢を関連付けています。

var albumId; 
 
$('label').click(function() { 
 
    albumId = $(this).data("albumid"); 
 
    $('#' + this.htmlFor).data('albumid', albumId); 
 
}); 
 

 
$('#uploadFile').on('change', function(e) { 
 
    alert("Changing album " + $(this).data('albumid')); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<label for="uploadFile" data-albumid="1">upload #1</label><br> 
 
<label for="uploadFile" data-albumid="2">upload #2</label><br> 
 
<label for="uploadFile" data-albumid="3">upload #3</label> 
 
<input id="uploadFile" type="file" style="display: none;">

+0

はい:私は、おそらく 'e'イベントを使用して、GLOBAL変数を作成せずにより洗練されたソリューションを探していましたか? – yarek

+0

私が知る限り、何かを選択したときに発生する変更イベントでファイルセレクタを開いた元のクリックイベントについては何もありません。 – Barmar

+0

変数がグローバルである必要はないことに注意してください。変数をローカルに保持するためにIIFEにすべてをラップすることができます。 – Barmar

関連する問題