ちょっと考えただけですが、値をjavascript変数に保存することを検討しましたか? JavaScript でのみ使用している場合、隠しフィールドや要素にわざわざ入れる必要はありません。
名前空間/モジュールを使用していない場合はグローバルスコープで変数を宣言するだけですが、使用している場合はそれを使用するモジュールのスコープに格納できます。
このアプローチに関する唯一の考慮事項は、ページの更新時に変数がリセットされることですが、サーバー上の値を使用しない場合は、スクリプトだけで問題ありません。
一般に、サーバーがそれを読み取れるようにする必要がある場合にのみ、非表示の入力を使用します。
編集
コメントへの回答では、名前空間の使用を含むJavaScriptを賢明に使用している場合、このアプローチは、「変数ホルダー」でマークアップを乱雑にするよりも、ある程度の優雅さで機能します
名前空間のための非常に迅速な足場.....
MyProject.Global.js というファイルに
//This function is truly global
function namespace(namespaceString) {
var parts = namespaceString.split('.'),
parent = window,
currentPart = '';
for (var i = 0, length = parts.length; i < length; i++) {
currentPart = parts[i];
parent[currentPart] = parent[currentPart] || {};
parent = parent[currentPart];
}
return parent;
}
MyProject.MyPage.Ui.js というファイルに
namespace('MyProject.MyPage');
MyProject.MyPage.Ui = function () {
var self = this;
self.settings = {};
function init(options) {
$.extend(self.settings, options);
//any init code goes here, eg bind elements
setValue();
};
};
//this is considered a "private" function
function setValue(){
$('#categories > li > a').click(function (e) {
e.preventDefault();
self.settings.myValue = $(this).attr('data-value');
refreshGrid('Reference');
});
}
function getValue(){
return self.settings.myValue;
}
//any function within this return are considered "public"
return {
init: init,
getValue: getValue
};
};
最後にあなたのページに...
$(document).ready(function () {
var ui = new MyProject.MyPage.Ui();
ui.init();
}
その後、いつでも...を使用して値を取得できます...
MyProject.MyPage.getValue()