我有以下代码。
(function() {
$(document).on("keydown", function(e) {
// ignore unless CTRL + ALT + N was pressed
if (!(e.keyCode == 78 && e.ctrlKey && e.altKey )) return
jQuery('[name*="type"]').select2("val","SECOND").trigger('change');
jQuery('[name*="size"]').val(5);
})
}())
基本上它的作用是当按下CTRL + ALT + N时,它会在页面上执行一些jquery。我遇到的问题是,当“类型”字段发生更改时,会运行一些JS并使“大小”字段可见(仅在type=SECOND
时可见)。所以,为了让它在此刻工作,我必须按CTRL + ALT + N两次。第一次设置类型的值,然后几秒钟后,一旦页面发生了变化,我再次这样做,它的大小填充值为5。
请注意,我已阅读Why does the jquery change event not trigger when I set the value of a select using val()?,这有助于我制作事件触发器,但我还没有完成。
主要HTML
<%= simple_form_for @type, :url => type_path, :remote => true, :html => {:method => :post} do |f| %>
<%= form_errors @type, :header_text => 'There are problems with one or more fields:' %>
<%= hidden_field_tag "change_type" %>
<%= render :partial => 'type', :locals => {:f => f} %>
<%= render :partial => 'size1', :locals => {:f => f} %>
<div class="form__action">
<a class="button" href="<%= type_path %>">Cancel</a>
<%= f.submit "Save", :class => 'button button--primary' %>
</div>
<% end %>
size1 partial
<% if @type.second? %>
<%= render :partial => 'size2' %>
<% end %>
new.js.coffee
$ = jQuery
$('#type_show').on('change', "#thing_type", ->
$this = $(@)
original = $("#thing_type_original").val()
current = $this.val()
if current in ['FIRST', 'SECOND']
$("#allow_something")
.filter(":hidden")
.select2("val", "true")
$("#allow_something")
.closest(".form__row").fadeIn()
else
$("#allow_something")
.not(":disabled")
.select2("val", "false")
.closest(".form__row").fadeOut()
if (current is "SECOND" and original isnt "SECOND") or (current isnt "SECOND" and original is "SECOND")
$('#change_type').val('true')
$this.closest("form").submit()
)