2016-12-26 38 views
2

我有一个输入字段type="hidden",它由javascript本身更改。通过Javascript更改输入字段的更改

当这个领域改变我想要一个事件/功能被触发。

尝试这样:

$(".product_id").on("change paste keyup input", function(event){alert('1');}); 
$(".product_id").blur(function(event){alert('1');}); 
$(".product_id").keypress(function(event){alert('1');}); 

但它似乎并不值由其他JavaScript改变文件本身的工作。

我无法更改或添加到现有的JavaScript。 我无法添加任何内容到输入字段。

+0

提供一个[MCVE]我有这个..there问题 – charlietfl

回答

5

您可以使用jQuery的trigger方法& change事件。

更改隐藏元素的值不会自动触发.change()事件。所以,只要你改变隐藏的输入,你应该告诉jQuery使用.trigger('change')方法触发它。

你可以这样说:

$(function() { 
 
    $("#field").on('change', function(e) { 
 
    \t alert('hidden field changed!'); 
 
    }); 
 
    
 
    $("#btn").on('click', function(e) { 
 
    \t $("#field").val('hello!').trigger('change'); 
 
    console.log('Hidden Filed Value: ' + $('#field').val()); 
 
    }); 
 
    
 
    console.log('Hidden Filed Value: ' + $('#field').val()); 
 
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<input id="field" type="hidden" name="name"> 
 
<button id="btn"> 
 
    Change Hidden Field Value 
 
</button>

希望这有助于!

+0

是选择场导致更改这个隐藏输入字段,所以我不得不触发这种改变的唯一的事是这个选择器字段,但是当我使用上面的方法时,它会首先触发我的更改,然后触发选择器更改,因此我最终得到错误的值。 – maharshi

+0

如果你可以在-jsfiddle链接中给我你的代码,你可以指定你的隐藏字段发生了哪些变化,我可以帮助你! –

+0

谢谢你,我解决了它:) – maharshi

-3
var element = $(".product_id"); 
element.on("change", function(){ 
    alert('hey'); 
}).triggerHandler('change'); 

,我们需要以编程方式触发它想:

$('.product_id').val('abcd').triggerHandler('change'); 
+0

没有好处,直到价值改变后触发事件。没有迹象表明答案中给出。只有代码答案没有什么价值......你应该提供解释 – charlietfl

1

这只是一个黑客,如果你不能触发来源change事件。

setInterval()可能不是一个好的解决方案。但是,如果您不能从正在更改hiddeninput值的来源触发change事件,则会有所帮助。

$("#input")[0].oninput = function(){ 
 
    $("#hidden").val($(this).val()); //setting hidden value 
 
} 
 
var oldVal = $("#hidden").val(); 
 
setInterval(function(){ //listening for changes 
 
    var newVal = $("#hidden").val(); 
 
    if(newVal !== oldVal){ 
 
    console.log(newVal); 
 
    oldVal = newVal; 
 
    } 
 
}, 1000);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<input type="hidden" id="hidden"> 
 

 
<input type="text" id="input">