функция вызывается из модальной таблицы. а к телу таблицы обращается ajax. в этой таблице по две строки в каждой из двух текстовых полей. Его идентификаторы различны для каждой строки и каждого текстового поля. Я покажу свои коды ниже.
функция ajax - это
$(document).ready(function(){
/////////////// Invoice Link Click ////////////////
$("#invoice").click(function(){
var rowID=[];
///////// Initialize and assign row row value /////////////
rowID = arrays;
var tempArrays='';
for(i=0;i<arrays.length;i++){
if (arrays[i]!=''){
if (tempArrays!=''){
tempArrays=tempArrays+','+arrays[i];
}
else{
tempArrays=arrays[i];
}
}
}
alert("SUCCESS ALERT" +tempArrays);
alert(typeof tempArrays);
if (rowID!=''){
$.ajax({
url:'<?php echo base_url(); ?>index.php/Ajax_calls/invoicingFetch',
type: 'POST',
data:{tempArrays:tempArrays},
success: function(data){
$('#newtest').html(data);
alert("SUCCESSFULLY RETURNED............!!!!!!!!");
}
});
}
});
});
ВКонтроллер AJAXФункция:
public function invoicingFetch(){
if (isset($_POST['tempArrays'])){
$output='';
$postedVal=$this->input->post('tempArrays');
$myArray = explode(',',$postedVal);
$this->load->model('Ajax_model');
$arrayLen=sizeof($myArray);
for($i=0;$i<$arrayLen;$i++)
{
$arre=$myArray[$i];
$records = $this->Ajax_model->getRawdataGDSSingle($arre);
foreach($records as $row){
$saleid='sale'.$row->slno;
$marginid='margin'.$row->slno;
$output.='
<tr>
<td style = "text-align:center !important;"><input type = "checkbox" id = "'.$row->slno.'" /> </td>
<td>'.$row->NAME.' </td>
<td>'.$row->TOTAL.' </td>
<td><input type = "text" id = "'.$saleid.'" name = "saleamount" onKeyPress = "UpdateMargin('.$saleid.','.$marginid.','.$row->TOTAL.')" onChange = "UpdateMargin('.$saleid.','.$marginid.','.$row->TOTAL.')" value = "'.$row->TOTAL.'" /> </td>
<td><input type = "text" id = "'.$marginid.'" name = "marginamount" onchange = "UpdateSale('.$marginid.','.$saleid.','.$row->TOTAL.')" value = "0" /> </td>
<td>'.$row->BKD_BY.' </td>
<td> </td>
<td>'.$routing.' </td>
<td>'.$row->A2L.' </td>
<td>'.$row->TKT_NUMBER.' </td>
</tr>
';
}
}
echo $output; ///this output is the table body in modal
}
}
Всценарийв заголовке модальной страницы
function UpdateMargin(saleid,marginid,total){
var sales=document.getElementById(saleid).value;
//var margin=document.getElementById(marginid).value;
var total=total;
var salMargin=sales-total;
document.getElementById(marginid).value=salMargin;
}
ошибка, отображаемый в консоли,

Отображается ошибка как Uncaught TypeError: невозможно прочитать свойство val, имеющее значение null
Кто-нибудь мог сказать мне причину? почему это происходит? Заранее спасибо всем бриллиантам .....
возможно, ваш требуемый элемент ID не имеет значения. Всегда ли $row->TOTAL представляет собой ценность? В каком событии возникает ошибка?
Функция UpdateMargin имеет ошибку согласно console. но в ваших снимках нет функции UpdateMargin
какова ценность массивов? а также можете ли вы поделиться своим html, если считаете, что это актуально
@ AndréKelling на onkeypress и onchange выдает ошибку. но в исходном инструменте он показывает значения как переданные. отображается как UpdateMargin (sale1765, margin1765,1110)
@NegiRox там в консоли. но показывает ошибку. значение передается, как показано ниже. затем также отображается ошибка .UpdateMargin (sale1765, margin1765,1110)
Массивы @NarendraMongiya существуют только в вызове ajax. эта область работает нормально. вот что мне нужно, я хочу изменить значение текстового поля в соответствии с другим изменением текстового поля. эта область html находится в функции контроллера ajax
это означает, что вы просто путаете между javascript и jquery



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Значение, которое вы пытаетесь получить от элемента, не существует в DOM. Пожалуйста, проверьте, существует ли элемент с saleid (независимо от того, что вы передаете)
я проверил . он несет значение как [объект HTMLInputElement]. что мне делать, чтобы это изменить?
Пожалуйста, проверьте saleid [0] или saleid.value с помощью alert.
saleid.value даст вам значение
.val() - это функция JQuery.
Но вы получаете элемент без JQuery.
Поэтому, если var margin=document.getElementById(marginid).value; работает, вам нужно изменить код .val() на var sales = $( '#' + saleid ).val();.
Если получение .value не сработало, либо у элемента нет значения (возможно, это не входной элемент), и вы ищете innerText или innerHTML или какое-либо свойство данных.
Если ничего из вышеперечисленного не соответствует действительности, то, вероятно, saleid не является действительным идентификатором в вашем HTML.
он показывает ошибку как это при внесении изменений, которые вы сказали Uncaught Error: Синтаксическая ошибка, нераспознанное выражение: # [object HTMLInputElement]
теперь я просто добавил алерт в функцию с saleid. он предупредил [объект HTMLInputElement]
на этой функции контроллера ajax значение передается, не могли бы вы его проверить?
это означает, что saleid уже является элементом, а не строкой, представляющей идентификатор этого элемента.
Решение на основе JQuery было бы следующим: var sales = $( saleid ).val(); без хеша, поэтому элемент будет обернут как элемент JQuery. Это было бы эквивалентом var sales=saleid.value;. Я бы предложил изменить имя с saleid и marginid на saleelement и marginelement внутри функции updateMargin, чтобы их имена были правильными, а не сбивали с толку.
использовать
var sales=saleid.value;
вместо того
var sales=document.getElementById(saleid).value;
Кто-нибудь мог это проверить?