我有两个AJAX功能。第一个函数获取第一个输入字段的结果并连接一个字符串,然后更改第二个输入字段的值。第二个输入字段是(type=”hidden”)
。第二个函数检查在第二个输入字段中是否触发了更改,然后在第三个输入字段上显示该值。输入字段#2中的价值变化不会触发任何事情。Example
<script>
$(document).ready(function () {
var timer = null;
var $result=$("#result");
$result.data('url',$result.val());
function submitForm( input ) {
$.ajax({
type: "POST",
url: "/concatenate/index.php",
data: {input:input},
dataType: "html",
success: function (data) {
var url=$result.data('url'),
newUrl= url+input+'/';
$result.val(newUrl);
}
});
return false
}
$("#input").on("keyup", function() {
var input = $(this).val();
clearTimeout(timer);
timer = setTimeout(function(){
submitForm(input) ;
}, 40);
})
});
$(document).ready(function () {
var timer = null;
var $result=$("#result").val();
function submitForm( input ) {
$.ajax({
type: "POST",
url: "/concatenate/index.php",
data: {input:input},
dataType: "html",
success: function (data) {
$result.val();
}
});
return false
}
$("#result").on("change", function() {
var input = $(this).val();
clearTimeout(timer);
timer = setTimeout(function(){
submitForm(input) ;
}, 40);
})
});
</script>
</head>
<body>
<h1>Enter a word:</h1>
<form action="index.php" method="post">
Input: <input type="text" id="input" name="input"></br>
Concatenated Result1(hidden): <input type="hidden" style="width:200px;" id="result" name="result" value="http//www.example.com/"></br>
Concatenated Result2: <input type="text" id="result2" name="result2" value=""></br>
</form>
答案 0 :(得分:2)
这个答案实际上是对您的代码的改进,但也许它会做您需要的并简化事情。
如果您只是丢弃第二个输入框,并显示#result(使其不隐藏),我认为这段代码可能有助于获得您需要完成的任务,并简化了一些事情。
这应该做的是每隔40ms向服务器提交一次请求,并且在该请求成功时,我们更新#result的显示值。
我现在注意到,如果这确实解决了问题,那么你已经完全摆脱了onChange
问题,因为现在真正的触发是keyup
事件。
$(document).ready(function() {
/** get the inputs we might need */
var $result = $('#result');
var $input = $('#input');
$result.data('url', $result.val());
var timer;
/** function to submit data to the server and
update the result input on success */
function submitForm( input, newValue) {
$.ajax({
type: "POST",
url: "/concatenate/index.php",
data: {input:input},
dataType: "html",
success: function (data) {
$result.val(newValue);
}
});
};
/** on key up, fill #result with the url + input */
$input.bind('keyup', function() {
var $this = $(this);
var inp = $this.val();
var url = $result.data('url');
var newValue = url + inp + '/';
if(timer) { clearTimeout(timer); }
timer = setTimeout(function(){
submitForm(inp, newValue) ;
}, 40);
return false;
});
});
答案 1 :(得分:0)
当以编程方式更改字段的内容时,不会触发OnChange事件。仅当用户在字段中输入数据时才会引发OnChange事件。
这就是它的工作方式。