Rails / jQuery:如何检查参数
Rails / jQuery: How to check for parameters
我有以下脚本,通过 AJAX 在 Rails 中执行并使用 ERB 模板:
问题
似乎只有第一个指定的选项(取消选中)适用于开关和复选框,else 语句中的部分不起作用!
<% if params[:type] == "switch" %>
var obj = $('.<%= params[:name] %> a:not(.label) #myonoffswitch:checkbox');
<% if params[params[:name]] %> // WORKS
$('.<%= params[:name] %> a:not(.label)').attr("href", "/update?name=abc&abc=true&type=switch"); // Changes link to check on next click
obj.prop('checked', false); // Unchecks switch
<% else %> // DOES NOT WORK
$('.<%= params[:name] %> a:not(.label)').attr("href", "/update?name=abc&abc=false&type=switch"); // Changes link to uncheck on next click
obj.prop('checked', true); // Checks switch
<% end %>
<% elsif params[:type] == "checkbox" %>
<% if params[params[:name]] %> // WORKS
$('.<%= params[:name] %> a:not(.label)').remove(); // Removes checked checkbox
$('.<%= params[:name] %>').prepend("<a data-remote='true' href='/update?name=<%= params[:name] %>&<%= params[:name] %>=true&type=checkbox'><i class='icon ion-android-checkbox-outline-blank' tabindex='0'></i></a>"); // Changes link to check on next click & Adds unchecked checkbox
<% else %> // DOES NOT WORK
$('.<%= params[:name] %> a:not(.label)').remove(); // Removes unchecked checkbox
$('.<%= params[:name] %>').prepend("<a data-remote='true' href='/update?name=<%= params[:name] %>&<%= params[:name] %>=false&type=checkbox'><i class='icon ion-android-checkbox' tabindex='0'></i></a>"); // Changes link to uncheck on next click & Adds checked checkbox
<% end %>
$('.<%= params[:name] %> a:not(.label) i').focus(); // Focuses on checkbox
<% end %>
DOM
<div class="name flex">
<a data-remote="true" href="/update?name=abc&abc=false&type=switch"><div class="onoffswitch">
<input checked="" class="onoffswitch-checkbox" id="myonoffswitch" name="onoffswitch" type="checkbox">
<label class="onoffswitch-label" for="myonoffswitch"></label>
</div>
</a>
<div class="label">
<a class="abc label" data-remote="true" href="/update?name=abc&abc=false&type=switch">ABC
</a>
<p class="abc labeltext">Lorem ipsum.</p>
</div>
</div>
<div class="name1 flex"><a data-remote="true" href="/update?name=name1&name1=true&type=checkbox">
<i class="icon ion-android-checkbox-outline-blank" tabindex="0"></i></a>
<div class="label">
<a class="abc label" data-remote="true" href="/update?name=name1&name1=false&type=checkbox">ABC
</a>
<p class="abc labeltext">Lorem ipsum.</p>
</div>
</div>
但是,我注意到只有当一个复选框或开关被选中时它才会被取消选中,如果它被取消选中它不会改变它的外观(DOM)。
我做错了什么?
if params[params[:name]]
的结果将始终是 布尔值 true 因为您的 if 条件检查 变量是否存在 .
因此将条件更改为 if params[params[:name]] == "false"
,因为这将检查 params[params[:name]]
中存在的值。
URL 中的所有内容都是字符串,因此您感到困惑。
我有以下脚本,通过 AJAX 在 Rails 中执行并使用 ERB 模板:
问题
似乎只有第一个指定的选项(取消选中)适用于开关和复选框,else 语句中的部分不起作用!
<% if params[:type] == "switch" %>
var obj = $('.<%= params[:name] %> a:not(.label) #myonoffswitch:checkbox');
<% if params[params[:name]] %> // WORKS
$('.<%= params[:name] %> a:not(.label)').attr("href", "/update?name=abc&abc=true&type=switch"); // Changes link to check on next click
obj.prop('checked', false); // Unchecks switch
<% else %> // DOES NOT WORK
$('.<%= params[:name] %> a:not(.label)').attr("href", "/update?name=abc&abc=false&type=switch"); // Changes link to uncheck on next click
obj.prop('checked', true); // Checks switch
<% end %>
<% elsif params[:type] == "checkbox" %>
<% if params[params[:name]] %> // WORKS
$('.<%= params[:name] %> a:not(.label)').remove(); // Removes checked checkbox
$('.<%= params[:name] %>').prepend("<a data-remote='true' href='/update?name=<%= params[:name] %>&<%= params[:name] %>=true&type=checkbox'><i class='icon ion-android-checkbox-outline-blank' tabindex='0'></i></a>"); // Changes link to check on next click & Adds unchecked checkbox
<% else %> // DOES NOT WORK
$('.<%= params[:name] %> a:not(.label)').remove(); // Removes unchecked checkbox
$('.<%= params[:name] %>').prepend("<a data-remote='true' href='/update?name=<%= params[:name] %>&<%= params[:name] %>=false&type=checkbox'><i class='icon ion-android-checkbox' tabindex='0'></i></a>"); // Changes link to uncheck on next click & Adds checked checkbox
<% end %>
$('.<%= params[:name] %> a:not(.label) i').focus(); // Focuses on checkbox
<% end %>
DOM
<div class="name flex">
<a data-remote="true" href="/update?name=abc&abc=false&type=switch"><div class="onoffswitch">
<input checked="" class="onoffswitch-checkbox" id="myonoffswitch" name="onoffswitch" type="checkbox">
<label class="onoffswitch-label" for="myonoffswitch"></label>
</div>
</a>
<div class="label">
<a class="abc label" data-remote="true" href="/update?name=abc&abc=false&type=switch">ABC
</a>
<p class="abc labeltext">Lorem ipsum.</p>
</div>
</div>
<div class="name1 flex"><a data-remote="true" href="/update?name=name1&name1=true&type=checkbox">
<i class="icon ion-android-checkbox-outline-blank" tabindex="0"></i></a>
<div class="label">
<a class="abc label" data-remote="true" href="/update?name=name1&name1=false&type=checkbox">ABC
</a>
<p class="abc labeltext">Lorem ipsum.</p>
</div>
</div>
但是,我注意到只有当一个复选框或开关被选中时它才会被取消选中,如果它被取消选中它不会改变它的外观(DOM)。
我做错了什么?
if params[params[:name]]
的结果将始终是 布尔值 true 因为您的 if 条件检查 变量是否存在 .
因此将条件更改为 if params[params[:name]] == "false"
,因为这将检查 params[params[:name]]
中存在的值。
URL 中的所有内容都是字符串,因此您感到困惑。