我的页面上有几个单选按钮和span元素。当我单击某个单选按钮时,Onchange事件处理程序会触发并更改span元素的文本。我无权访问该事件处理程序,因此我无法对其进行更改。 我需要编写自己的脚本(Onchage事件处理程序),这将在其他脚本(如上所述)更改DOM中的span元素之后更改span元素的文本。 例: HTML:
<div>
<input type="radio" name="somename" value="1.232" checked="checked">1.232
<input type="radio" name="somename" value="2.556">2.556
<input type="radio" name="somename" value="3.232">3.232
<input type="radio" name="somename" value="4.865">4.865
</div>
<span id="change">1.232</span>
使用Javascript:
$('div input:radio').change(function(){
//some logic here
//calculation of value of the varaiable 'new_value' is encapsulated
//new_value = .....
$(#change).html(new_value);
});
我无法更改上面的javascript代码。 我需要编写onChange事件处理程序来更改跨度的html取决于新值,这是上面的脚本所做的。如果我要写:
$('div input:radio').change(function(){
alert($(#change).html());
});
我会提醒旧的跨度值。 如何实现这个?
答案 0 :(得分:1)
好的,所以问题是调用.html()
实际上没有触发事件(人们可能期望在这种情况下调用更改事件),所以你必须扩展jQuery(实际上并不那么难)所以那里是你可以听的东西你可以试试这个:(demo)
(function ($) {
// create a reference to the old `.html()` function
var htmlOriginal = $.fn.html;
// redefine the `.html()` function to trigger an event
$.fn.html = function (html) {
var ret = htmlOriginal.apply(this, arguments);
//if ret is a String then there is no event to trigger
if(typeof ret !== "string") {
ret.trigger('html-change');
}
return ret;
}
})(jQuery);
$(function () {
$('div input:radio').change(function () {
var v = $(this).val();
//Original and magical value
setTimeout(function () {
//Just doing some async stuff to prove that these are decoupled
$('#change').html(v);
}, 500);
});
$('#change').on('html-change', function () {
//Now just listen to the html-change event which will be triggered any time .html() is called even that call was made by previously unmodified code)
alert($(this).html());
});
});