我坚持使用以下代码,希望有人可以提供帮助或给我一些建议: 基本上我正在做的是使用ajax调用cf函数:当用户在字段“artid”中写入id时 与该id相关的信息将出现在其他cfinput中。上面的代码工作正常。
<cfajaxproxy bind="cfc:portal_dgmu.pruebas.addPerson.test.getData({artid@keyup})" onsuccess="showData">
<script>
function showData(d) {
var data = {}
for(var i=0; i < d.COLUMNS.length; i++) {
data[d.COLUMNS[i]] = d.DATA[0][i]
}
document.getElementById('artname').value = data["ARTNAME"]
document.getElementById('description').value = data["DESCRIPTION"]
document.getElementById('price').value = data["PRIZE"]
}
</script>
<html>
<cfform>
id: <cfinput type="text" name="artid" id="artid"><br/>
nombre: <cfinput type="text" name="artname" id="artname" readonly="true"><br/>
descripcion: <cftextarea name="description" id="description" readonly="true"></cftextarea><br/>
precio: <cfinput type="text" name="price" id="price" readonly="true"><br/>
</cfform>
</html>
我也有以下代码:
<script>
function addFields(){
var number = document.getElementById("member").value;
var container = document.getElementById("container");
while (container.hasChildNodes()) {
container.removeChild(container.lastChild);
}
for (i=0;i<number;i++){
container.appendChild(document.createTextNode(i+1));
var input = document.createElement("input");
input.type = "text";
input.name = "member" + i;
var boton = document.createElement("input");
boton.name = "boton" + i;
container.appendChild(input);
container.appendChild(boton);
container.appendChild(document.createElement("br"));
}
}
</script>
<html>
Enter a number of persons: (max. 10)<input type="text" id="member" size="3" name="member" value="">
<a href="#" id="filldetails" onclick="addFields()">Agregar</a>
<div id="container"/>
</html>
上面的代码只是根据用户输入的数字添加文本字段,它也可以正常工作。
我的问题是我无法弄清楚如何集成它们,我的意思是我需要做的是取决于用户键入的数字部署文本字段,第一个必须输入一个id将带来与该ID相关的数据。
非常感谢!!
答案 0 :(得分:4)
这是一个使用jquery的例子,它涵盖了你想要做的一切。
我更改了ajax请求,以便在更改输入字段而不是键盘时触发,但如果需要,您可以轻松更改。
如果您使用cf&lt; cfc,则可能需要更改9我只在firefox中测试过,但它应该可以在其他浏览器中使用。
<html>
<head>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
var formToCopy = $('<form/>')
.append($('<input/>', {'name': 'dataId', 'type': 'text', 'placeholder': 'Some Id Here'}))
.append($('<input/>', {'name': 'testInput', 'type': 'text', 'readonly': 'readonly'}))
.append($('<textarea/>', {'name': 'testArea', 'readonly': 'readonly'}));
$('#howMany').on('change', null, null, function(e){
var numToAdd = $(this).val();
if(isNaN(numToAdd)){
return;
}
$('#container').html('');
for(var i=0; i < numToAdd; i++){
$(formToCopy).clone().appendTo('#container');
}
});
$('#moar').on('click', null, null, function(e){
$(formToCopy).clone().appendTo('#container');
});
$('#less').on('click', null, null, function(e){
$('#container form:last').remove();
});
$(document).on('change', '#container form input[name="dataId"]', null, function(e){
if($(this).val().length === 0){
return;
}
var $formToFill = $(this).closest('form');
var ajaxSuccessFunc = function(data){
for(var key in data){
var item = data[key];
var $field = $formToFill.find('input[name="'+key+'"], textarea[name="'+key+'"]');
if($field.length === 1){
$field.val(item);
}
}
};
$.ajax({
'url': '/test.cfc',
'dataType': 'json',
'data': {
'method': 'getData',
'id': $(this).val()
},
'success': ajaxSuccessFunc
})
});
});
</script>
</head>
<body>
<label>How Many? <input type="text" id="howMany" /></label>
<p><a href="#zzz" id="moar">+</a> / <a href="#zzz" id="less">-</a></p>
<div id="container">
</div>
</body>
</html>
<cfcomponent output="false">
<cffunction name="getData" access="remote" output="false" returnformat="json">
<cfargument name="id" type="string" required="true">
<cfscript>
local.ret = {};
ret["testInput"] = rand();
ret["testArea"] = "blah blah";
return ret;
</cfscript>
</cffunction>
</cfcomponent>