在第二次尝试之前,Jquery触发的更改不可见

时间:2014-01-08 23:13:25

标签: javascript jquery ruby-on-rails coffeescript

我有以下代码。

(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()
)

0 个答案:

没有答案