我有一个选择框 (Specie) 和一个 typeAhead 输入字段 (Breed),我需要更新选择框的更改,我有以下代码。
<div class="col-lg-4 col-md-4 col-sm-12 col-xs-12 profile-fields-margin-bottom">
<select class="form-control select_field_style specie-breed" id="species" name="species" required>
<option disabled selected>Select a Species</option>
<option value="Dog">Dog</option>
<option value="Cat">Cat</option>
<option value="Horse">Horse</option>
</select>
</div>
<div class="col-lg-4 col-md-4 col-sm-12 col-xs-12 profile-fields-margin-bottom">
<input id="breed" type="text" class="form-control charsonly" name="breed" placeholder="Breed">
</div>
$(document).on('change', '.specie-breed', function() {
let specie = this.value;
$('#breed').typeahead({
source: function (query, process) {
return $.get('/get/breeds/' + specie, { query: query }, function (data) {
console.log(data);
return process(data);
});
}
});
});
它的工作,但第一次,第二次改变不会改变 typeahead 的值,
我在这里错过了什么?
最佳答案
Its working but for the first time, The second time change doesn't change the values of the typeahead,
我认为那是因为第二次、第三次等,AJAX URL 不再更改;那是因为 specie保留为最初分配给它的值。
我的意思是,假设您选择了 Cat从下拉菜单;所以第一个change该菜单的事件被触发,并且specie设置为 Cat .但是,当您稍后选择 Horse 时(或 Dog ), specie 来自 source 的闭包选项保持为Cat .
This Pen可以帮助您理解它。
所以一个简单的解决方法是引用 specie至 this而不是 this.value .
$(document).on('change', '.specie-breed2', function() {
let specie = this; // Reference the Element.
$('#breed').typeahead({
source: function (query, process) {
return $.get('/get/breeds/' + specie.value, { query: query }, function (data) {
console.log(data);
return process(data);
});
}
});
});
或者你可以这样做:
$('#breed').typeahead({
source: function (query, process) {
if ( ! $( '#species' ).val() ) {
return;
}
return $.get('/get/breeds/' + $( '#species' ).val(), { query: query }, function (data) {
console.log(data);
return process(data);
});
}
});
更新
实际的解决方案,或者您在代码中遗漏的,(我认为)是:Destroy typeahead在 #breed 上重新初始化前的字段 typeahead在那个领域。
$(document).on('change', '.specie-breed', function() {
let specie = this.value;
// Destroy existing instance.
$('#breed').typeahead( 'destroy' );
// (Re-)Initialize `typeahead`.
$('#breed').typeahead({
source: function (query, process) {
return $.get('/get/breeds/' + specie, { query: query }, function (data) {
console.log(data);
return process(data);
});
}
});
});
这样,specie可以分配或引用到 this.value (即当前选择的“物种”),您将获得正确的值(例如 Cat 或 Dog )。
关于javascript - Jquery 选择改变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50229243/
rails中是否有任何规定允许站点的所有AJAXPOST请求在没有authenticity_token的情况下通过?我有一个调用Controller方法的JqueryPOSTajax调用,但我没有在其中放置任何真实性代码,但调用成功。我的ApplicationController确实有'request_forgery_protection'并且我已经改变了config.action_controller.consider_all_requests_local在我的environments/development.rb中为false我还搜索了我的代码以确保我没有重载ajaxSend来发送
状态:我正在构建一个应用程序,其中需要一个可供用户选择颜色的字段,该字段将包含RGB颜色代码字符串。我已经测试了一个看起来很漂亮但效果不佳的。它是“挑剔的颜色”,并托管在此存储库中:https://github.com/Astorsoft/picky-color.在这里我打开一个关于它的一些问题的问题。问题:请建议我在Rails3应用程序中使用一些颜色选择器。 最佳答案 也许页面上的列表jQueryUIDevelopment:ColorPicker为您提供开箱即用的产品。原因是jQuery现在包含在Rails3应用程序中,因此使用基
我有一个电子邮件表格。但是我正在制作一个测试电子邮件表单,用户可以在其中添加一个唯一的电子邮件,并让电子邮件测试将其发送到该特定电子邮件。为了简单起见,我决定让测试电子邮件通过ajax执行,并将整个内容粘贴到另一个电子邮件表单中。我不知道如何将变量从我的HAML发送到我的Controllernew.html.haml-form_tagadmin_email_blast_pathdoSubject%br=text_field_tag'subject',:class=>"mass_email_subject"%brBody%br=text_area_tag'message','',:nam
我完全不是程序员,正在学习使用Ruby和Rails框架进行编程。我目前正在使用Ruby1.8.7和Rails3.0.3,但我想知道我是否应该升级到Ruby1.9,因为我真的没有任何升级的“遗留”成本。缺点是什么?我是否会遇到与普通gem的兼容性问题,或者甚至其他我不太了解甚至无法预料的问题? 最佳答案 你应该升级。不要坚持从1.8.7开始。如果您发现不支持1.9.2的gem,请避免使用它们(因为它们很可能不被维护)。如果您对gem是否兼容1.9.2有任何疑问,您可以在以下位置查看:http://www.railsplugins.or
我有以下内容:text.gsub(/(lower)(upper)/,'\1\2')我可以将\2替换为大写吗?类似于:sed-e's/\(abc\)/\U\1/'这在Ruby中可行吗? 最佳答案 查看gsub文档:str.gsub(模式){|匹配|block}→new_str在block形式中,当前匹配字符串作为参数传入,$1、$2、$`、$&、$'等变量将被适当设置。block返回的值将替换为每次调用的匹配项。"alowerupperb".gsub(/(lower)(upper)/){|s|$1+""+$2.upcase}
我希望用户从一个模型的三个选项中选择一个。即我有一个模型视频,可以被评为正面/负面/未知目前我有三列bool值(pos/neg/unknown)。这是处理这种情况的最佳方式吗?为此,表单应该是什么样的?目前我有类似的东西但显然它允许多项选择,而我试图将它限制为只有一个..怎么办? 最佳答案 如果要使用字符串列,让我们说rating。然后在你的表单中:#...#...它只允许一个选择编辑完全相同但使用radio_button_tag: 关于ruby-on-rails-Rails单选按钮-模
我遇到了一个非常奇怪的问题,我很难解决。在我看来,我有一个与data-remote="true"和data-method="delete"的链接。当我单击该链接时,我可以看到对我的Rails服务器的DELETE请求。返回的JS代码会更改此链接的属性,其中包括href和data-method。再次单击此链接后,我的服务器收到了对新href的请求,但使用的是旧的data-method,即使我已将其从DELETE到POST(它仍然发送一个DELETE请求)。但是,如果我刷新页面,HTML与"new"HTML相同(随返回的JS发生变化),但它实际上发送了正确的请求类型。这就是这个问题令我困惑的
我的Rails应用程序中安装了carrierwave。但是,当用户上传多页pdf时,我只希望应用程序获取文档中的第一页并将其转换为jpeg。这可能吗?用什么命令?这是我的uploader。#encoding:utf-8classImageUploader[200,300]##defscale(width,height)##dosomething#end#Createdifferentversionsofyouruploadedfiles:version:thumbdoprocess:resize_to_fill=>[150,210]process:convert=>:jpgdefful
对于用户模型,我有一个过滤器来检查用户的预订状态,该状态由整数值(0、1或2)表示。UserActiveAdmin索引页上的过滤器是通过以下代码实现的:filter:booking_status,as::select然而,这会导致下拉选项为0、1或2。当管理员用户从下拉列表中选择它们时,我更愿意自己将它们命名为“未完成”、“待定”和“已确认”之类的名称。有没有办法在不改变booking_status在模型中的表示方式的情况下做到这一点? 最佳答案 假设booking_status是模型中的枚举字段,您可以使用:过滤器:booking
这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:HowdoIgeneratealistofnuniquerandomnumbersinRuby?我想做的事:Random.rand(0..10).timesdoputsRandom.rand(0..10)end但如果随机数已经显示过,则无法再次显示。如何最轻松地做到这一点?