【发布时间】:2012-10-09 13:17:26
【问题描述】:
我无法更改通过 ajax 动态加载的隐藏表单元素的值。当用户单击日期时,我希望一些隐藏的输入字段能够自动更新为日、月和年(为简化起见,代码中只显示了日)。
我想主要问题是如何选择通过 ajax 动态加载的元素。
简化代码:
index.php
<a href="#" id="someLink">Click Me</a>
include.js
$(document).ready(function(){
$('#someLink').click(function(){
// Create modal dialog dynamically
var modal = $('<div/>').attr({
id:'new' + objectName + 'Modal',
class:'modal hide fade',
tabindex:'-1',
role:'dialog',
});
// Ajax call to load modal
$.ajax({
url: "getModal.php",
}).done(function ( data ) {
modal.html(data);
});
// show form
modal.modal('show');
return false;
});
// bind datepicker from jQuery UI to text input
$("body").on({
focus: function(){
$('.datepicker').datepicker({
onClose: function(dateText, inst) {
var inputName = $(this).attr("name"); //returns "startDate"
console.log($('#'+inputName+'_day')); // returns "[]"
$('#'+inputName+'_day').val(new Date(dateText).getDate());
}
});
}
},'.datepicker');
});
getModal.php
echo <?php
echo "<form name='modalForm'>";
echo "<input type='hidden' name='startDate_day' id='startDate_day'>";
echo "<input type='text' class='datepicker' name='startDate' id='startDate'>";
echo "</form>";
echo ?>
【问题讨论】:
-
inputName在哪里定义?我在你的代码中只能找到用法,没有定义 -
据我所知,与您的 ajax 加载无关,这不是重点。您只需像往常一样选择 DOM 元素并更改它。而
console.log('#'+inputName+'_day') => []- 这不可能是真的,[]可以由 jQuery 包装器返回,而不是通过字符串的 concat -
我添加了现在显示 inputName 来自何处的行。
-
jQuery 不会骗你,你没有
id等于startDate_day的元素 -
抱歉这个错误,我已经更正了帖子。在我的 webapp 中,确实有一个 id 等于“startDate_day”。
标签: jquery-ui jquery jquery-selectors