2012-10-09 159 views
0

我无法更改通过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 ?> 
+0

“inputName”的定义在哪里?我只能在代码中找到唯一的用法和定义 –

+0

据我所知,与您的ajax加载无关,这不是重点。您只需像往常一样选择DOM元素并进行更改。并且'console.log('#'+ inputName +'_ day')=> []' - 这不是真的,'[]'可以通过jQuery包装器返回,而不是通过字符串连接器 –

+0

我添加了一行现在显示inputName来自哪里。 – arcdegree

回答

0

我能找到问题的原因,我希望能帮助别人。

我使用Grails/Rails,并自动在ID中放入一个句点字符,我忽略了这一点。后来我试图使用jQuery来调用名称中不含有句号的元素(因为句号是为类名保留的)。

我确实创建了一个jsfiddle,显示了此问题成功工作的详细信息。

1

DOM元素的加载方式应该没有问题,如果存在的话--jQuery会找到它。

你应该name选择

$('input[name="' + inputName + '"_day"]').val(...); 

选择你的元素,或给你的加载输入一个id="startDate_day"

+0

我已经尝试过使用这个ID。既没有工作。 – arcdegree

+0

你可以做小提琴吗? http://jsfiddle.net/ –

+0

看看我的复制http://jsfiddle.net/YJX8P/1/ –

0

您可以使用Chrome的控制台或Firebug的尝试摘录如下。

console.log(inputName); 
$('#'+inputName+'_day').val(); 

必须存在一个名称的元素,否则jQuery将无法返回任何东西。

就像另一种调试技术一样,您可以尝试在页面查看源中搜索单词“form”,以查看您所需的表单是否已加载。

+0

据我了解,形式是正确显示,并有一个日期选择器,其回调实际上不起作用 –