12

I have this input hidden:

<input id="j_idt26:myValue" type="hidden" name="j_idt26:myValue" value="0?100?">

I want to alert "hey" the first time the value is set and then every time it changes.

I have something like this:

$(document).ready(function(){
    var $hello= $('[id$=myValue]');

    $hello.bind("change load", function(){
        alert('hey');
    });
});

But nothing is showing up.
If you can help
Thanks

4

4 回答 4

20
$(function(){
    var $hello= $('[id$="myValue"]');

    $hello.on("change", function(){ //bind() for older jquery version
        alert('hey');
    }).triggerHandler('change'); //could be change() or trigger('change')
});

然后,每次更改目标隐藏输入的值时,触发处理程序,例如:

$('#j_idt26:myValue').val('0?200?').triggerHandler('change');

这是因为 onchange 事件不会以编程方式自动更改其值。

于 2013-07-17T09:00:29.427 回答
3

change 事件在输入事件之后触发blur,换句话说,当输入失去焦点时。MDN 文档对此进行了描述:

当元素在其值更改后失去焦点但未提交时(例如在编辑 or 的值之后)。

由于input是 hidden 类型,因此永远不会有任何用户交互,input除非您的站点提供的客户端脚本对其进行更改,否则它不会更改,这不会触发更改事件。

这里有两个选项:

显式调用 change()

每当您修改隐藏输入调用的值.change()以触发事件时。

$(document).ready(function(){
    var $hello= $('[id$=myValue]');

    $hello.on("change", function(){
        alert('hey');
    });

    $hello.val("Something");
    $hello.change();
});

只需在没有处理程序的情况下调用代码

无需使用事件处理程序,只需执行源代码中的代码即可。

$(document).ready(function(){
    var $hello= $('[id$=myValue]');
    $hello.val("Something");
    alert('hey');
});

我想提到的另一件事是选择器的范围可以更好一些。

    var $hello= $('input[id$=myValue]');

如果您使用新版本的 jQuery on,而不是bind如上例所示。

于 2013-07-17T09:03:17.787 回答
1

这很容易:

$('#my_id').val(myValue).trigger('change');

然后您可以检测 $('#my_id') 上的更改值

于 2014-06-05T14:19:04.280 回答
0

你可以试试这段代码:

$(function(){
    var $hello = $('[id$="myValue"]');

    $hello.bind("change load", function(){
        alert('hey');
    });
});
于 2013-07-17T08:56:32.777 回答