我有兩個不同的視圖:edit.html.erb 和 create.html.erb 我想在兩個頁面上添加類似的功能 onclick a checkbox 但想避免在兩個檔案中撰寫冗余代碼:
目前我在這兩個檔案中都在做什么:在 create.html.erb
<script>
function onclick (event) {
var message = 'Are you sure ?';
confirm(message) || event.preventDefault();
}
var elem = document.getElementById('create');
elem.addEventListener('click', onclick);
</script>
在edit.html.erb
<script>
function onclick (event) {
var message = 'Are you sure ?';
confirm(message) || event.preventDefault();
}
var elem = document.getElementById('edit');
elem.addEventListener('click', onclick);
</script>
理想情況下,我想要一個 js 檔案,當單擊創建或編輯而不是在兩個檔案上單獨撰寫此方法時,可以捕獲這兩個事件。在這里做 DRY 的好方法是什么。
uj5u.com熱心網友回復:
我會像 Rails UJS 那樣做——通過添加一個事件偵聽器來定位具有data-confirm屬性的元素:
function handleConfirm(e){
if (!event.target.matches('[data-confirm]')){ return; };
const attr = e.target.dataset.confirm;
const message = attr.length > 0 ? attr : 'Are you sure ?';
window.confirm(message) || e.preventDefault();
}
document.addEventListener('click', handleConfirm);
<button>No confirmation</button>
<button data-confirm>Standard message</button>
<button data-confirm="REALLY???!!">A button with a custom text</button>
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/379921.html
標籤:javascript 红宝石轨道 ruby-on-rails-3
