rails自带In-Place文本编辑,但是我一直想弄一个In-Place的下拉列表前几天在看《Rails Recipes》的时候看见有这么一篇文章,但是试过之后发现在ie下不能正常显示
注释上说是innerhtml的问题。周末在网上搜索了几个解决办法。把自己的实现过程列下来。
js代码放在public文件夹下命名为in_place_select_editor.js
Ajax.InPlaceSelectEditor = Class.create();
Object.extend(Object.extend(Ajax.InPlaceSelectEditor.prototype, Ajax.InPlaceEditor.prototype),
//继承了InPlaceEditor重写了createEditField方法
{
createEditField: function(){
var text;
if (this.options.loadTextURL) {
text = this.options.loadingText;
}
else {
text = this.getText();
}
this.options.textarea = false;
var selectField = document.createElement("select");
selectField.name = "value";
//innerhtml在ie下可能有问题
//改动部分
if (this.options.selectOptionsHTML)
{
OptionsHTML=this.options.selectOptionsHTML.split(",")
for(var i=0; i < OptionsHTML.length; i++) {
selectField.options[i] = new Option(OptionsHTML[i],OptionsHTML[i]);
}
}
else
{
selectField.options[0] = new Option('test','test');
}
//改动结束
$A(selectField.options).each(function(opt, index){
if (text == opt.value) {
selectField.selectedIndex = index;
}
});
selectField.style.backgroundColor = this.options.highlightcolor;
this.editField = selectField;
if (this.options.loadTextURL) {
this.loadExternalText();
}
//关键是在form里面的内容
this.form.appendChild(this.editField);
}
});
view层命名为demo.rhtml
<div>
<span class="in_place_editor_field" id="an_element_we_want_to_edit">Some Value</span>
</div>
<script type="text/javascript">
new Ajax.InPlaceSelectEditor('an_element_we_want_to_edit', '/an/update/url', {
selectOptionsHTML: 'Blah' +
',Some Value' +
',Some Other Value'
});
</script>
如果想象in_place_editor_field那样使用
可以在application_helper.rb加入以下代码
module ApplicationHelper
def in_place_select_editor_field(object, method, tag_options = {},
in_place_editor_options = {})
tag = ::ActionView::Helpers::InstanceTag.new(object, method, self)
tag_options = { :tag => "span" ,
:id => "#{object}_#{method}_#{tag.object.id}_in_place_editor" ,
:class => "in_place_editor_field" }.merge!(tag_options)
in_place_editor_options[:url] =
in_place_editor_options[:url] ||
url_for({ :action => "set_#{object}_#{method}" , :id => tag.object.id })
tag.to_content_tag(tag_options.delete(:tag), tag_options) +
in_place_select_editor(tag_options[:id], in_place_editor_options)
end
def in_place_select_editor(field_id, options = {})
function = "new Ajax.InPlaceSelectEditor("
function << "'#{field_id}', "
function << "'#{url_for(options[:url])}'"
function << (', ' + options_for_javascript(
{
'selectOptionsHTML' =>
%('#{escape_javascript(options[:select_options].gsub(/\n/, ""))}' )
}
)
) if options[:select_options]
function << ')'
javascript_tag(function)
end
end
view层
<P>
<b>Name:</b>
<%= in_place_editor_field :contact, :name %>
<br/>
<b>Country:</b>
<%= in_place_select_editor_field(
:contact,
:country,
{},
:select_options => '中国,美国,英国') %>
</P>
controller层
class ContactsController < ApplicationController
in_place_edit_for :contact,:country
.....
def show
@contact = Contact.find(params[:id])
end
.....
end
最后别忘了在使用前加上
<%= javascript_include_tag "in_place_select_editor" %>
附上show.rhtml结果
- 描述: 点击前
- 大小: 47.6 KB
- 描述: 点击后
- 大小: 52.1 KB
分享到:
- 2008-07-22 12:29
- 浏览 1685
- 评论(5)
- 论坛回复 / 浏览 (5 / 3486)
- 查看更多
相关推荐
要查看的文件: (VB: )如何调用约会编辑表而不是就地编辑下面的示例演示如何更改最终用户在Scheduler控件中按下键时执行的默认操作。 默认情况下将调用就地编辑器,从而使用户能够修改“主题”字段。...
In a surprisingly short period of time, Visual Studio Code has become very popular among web developers. Part of that is because it’s fast, lightweight, and is available on the three main platforms ...
Bash-Terminal-Keyboard-Shortcuts-for-Editing.pdf
bash-vi-editing-mode-cheat-sheet Readline VI Editing Mode Cheat Sheet Default Keyboard Shortcuts for Bash
controlling D flipflop circuit
fyilmaz2312-fyilmaz2312-Ajax-and-AspNetMvc-Page-in-Without-Refreshing-The-Product-Editing-Adding
Undo/Redo operations in Bitmap-based Collaborative Graphic Editing Systems
Large-Scale Physics-Based Terrain Editing 2011
Make ordinary photos extraordinary with Photoshop Elements 13 Whether you prefer to snap shots ...editing software program, Photoshop Elements 13 All-in-One For Dummies has everything you need—and more.
matlab开发-Poissonimageediting。possion图像编辑的matlab实现(无缝克隆和混合梯度)
matlab开发-PoissonImageEditing。佩雷斯关于泊松图像编辑的论文的直接实现
目录RNA-editing分析实战- 获取合适的测试数据RNA-editing分析实战获取合适的测试数据 目录我们要找到的数据集要满足以下几个条件:- ribo
波松影像編輯源碼,實現影像無痕複製方法,為Perez於2003年發表在SIGGRAPH文件之實作
SmarTTY is a free multi-tabbed SSH client that supports copying files and directories with SCP on-the-fly and editing files in-place.
对于习惯vim编辑的linux用户,在~/.bashrc文件中添加set -o vi,设置bash vim命令模式,可以加快方便输入
extjs-grid-row-editing-php-backend 这是 MiamiCoder.com 上 ExtJS 网格编辑教程的源代码。
Window using C Programming, storing data in a structures as a , searching and editing data
geomajas-project-client-gwt.zip,geomajas gwt客户端:插件编辑-javascript apigomeajas gwt客户端项目
jsf 的简单例子,实现增删改查及分页,通过学习,很好的理解jsf开发。
A unique compact book on digital video editing fundamentalsCovers digital video file formats and data footprint optimizationTeaches you how to build a production pipeline,解压密码 share.weimo.info