捕获输入字段中的文本更改

时间:2012-02-16 10:34:02

标签: javascript jquery joomla

我正在使用joomla日历来选择日期。下面显示了它的html代码。在此处单击图像时,将弹出日历,您可以在此处选择日期,弹出窗口将关闭,日期值将显示在输入文本字段中。我想要的是如果日期改变,我想写一个函数来做一个ajax帖子。(输入文本更改)。我尝试过简单的alert()但是没有用。我认为这是由于失去了对文本字段的关注,因为只有我们点击的图像,并且没有用鼠标或任何按键与输入字段联系。请帮助我解决这个问题。

$("#select_date").change(function(){
   alert('Working');
});

HTML代码

<input id="select_date" type="text" value="2012-02-16" name="select_date" title="Thursday, 16 February 2012">
<img id="select_date_img" class="calendar" alt="Calendar" src="/eap_movies/media/system/images/calendar.png">

PHP代码

JHTML::_('behavior.calendar');
JHTML::calendar(date('Y-m-d'),'select_date', 'select_date', '%Y-%m-%d');

3 个答案:

答案 0 :(得分:2)

仅在输入松散焦点(模糊)时才会触发更改事件。

如果可能,您可以观看按键,键盘或键盘事件,或者在选择日期时触发自己的事件。

答案 1 :(得分:2)

Mihai Bazon's DHTML Calendar v1.0 (在/media/system/js/calendar.js下)onSelectedonClose个事件的回调。因此,应该可以在日历关闭或用户选择日期时捕获。

解决方案1 ​​ - 编辑Joomla

第1步 - 您需要覆盖此文件:libraries/joomla/html/html.php

// added $onSelected parameter
public static function calendar($value, $name, $id, $format = '%Y-%m-%d', $attribs = null, $onSelected)
{
  ...
$document->addScriptDeclaration('window.addEvent(\'domready\', function() {Calendar.setup({
            inputField: "'.$id.'",          // id of the input field
            ifFormat: "'.$format.'",        // format of the input field
            button: "'.$id.'_img",          // trigger for the calendar (button ID)
            align: "Tl",                            // alignment (defaults to "Bl")
            singleClick: true,
            onSelected: '.$onSelected.'
});});');
...
}

第2步 - 为onSelected

定义回调
JHTML::_('behavior.calendar');
JHTML::calendar(date('Y-m-d'),'select_date', 'select_date', '%Y-%m-%d', null, 'userSelectedDate');

第3步 - 实施回调

function userSelectedDate(calendar, date){ ... }

注意:我没有主动安装Joomla,因此上面的代码可能会出现语法错误。

解决方案2 - Sara更容易解决方案

onchange定义添加到$attribs的{​​{1}}参数:

JHTML::calendar

也请访问DHTML Calendar Website

答案 2 :(得分:1)

您使用的是哪个版本的jquery? 我遇到了同样的问题而且我一起去了

$('elementName').on("input propertychange",function() {
 alert("detected");
});

因为使用keyup事件在你的情况下不起作用,因为实际上没有用户与该字段的交互。