Функция замены JavaScript не работает - PullRequest
0 голосов
/ 04 июля 2018

Я разместил код CodeIgniter ниже, и в этом коде я отправляю ajax-вызовы для получения транслитерации пользовательского ввода. Все работает отлично, но на этой линии:

$("#"+modal_field_prefix+"<?php echo $lang; ?>").val($("#"+modal_field_prefix+"<?php echo $lang; ?>").val().replace(/(^[،\s]+)|([،\s]+$)/g, '')  );

Я пытаюсь обрезать значение поля ввода, но значение не обрезается, и оно остается как есть. Подскажите пожалуйста в чем может быть проблема?

Код:

<?php foreach($this->config->item('allowed_lang') as $code => $lang) { ?>
    $("#"+modal_field_prefix+"<?php echo $lang; ?>").val('');
    for(i=0; i<all_values.length; i++) {
        $.ajax({
            type: "GET",
            async: true,
            dataType: 'json',
            url: "https://www.google.com/inputtools/request?text="+all_values[i]+"&ime=transliteration_en_"+"<?php echo $code; ?>"+"&num=5&cp=0&cs=0&ie=utf-8&oe=utf-8&app=jsapi&uv",
            success: function (data) {
                $("#"+modal_field_prefix+"<?php echo $lang; ?>").val( data[1][0][1][0] +"، "+ $("#"+modal_field_prefix+"<?php echo $lang; ?>").val() );
            }
        });
        $("#"+modal_field_prefix+"<?php echo $lang; ?>").val( $("#"+modal_field_prefix+"<?php echo $lang; ?>").val().replace(/(^[،\s]+)|([،\s]+$)/g, '')  );        
    }
<?php } ?>

Ответы [ 4 ]

0 голосов
/ 04 июля 2018

Ваш код довольно странный.
$("#"+modal_field_prefix+"")

Вы забыли буквальную строку "" Surround Modal_field_prefix? Это должно быть
$("#" + "modal_field_prefix" + "")

0 голосов
/ 04 июля 2018

Метод replace не заменяет значение выражения «на месте». Используйте назначение, чтобы получить замененное значение. Например:

var string1;

string1 = $("#"+modal_field_prefix+"<?php echo $lang; ?>")
           .val().replace(/(^[،\s]+)|([،\s]+$)/g, '');
$("#"+modal_field_prefix+"<?php echo $lang; ?>").val(string1);
0 голосов
/ 04 июля 2018

Поскольку Ajax является асинхронным в JavaScript .

Ваша функция успеха будет запущена после получения ответа Но на запрос нужно время, чтобы получить ответ. Таким образом, программа пропустит функцию обратного вызова Ajax и сразу запустит следующую строку кодов.

Вы можете легко исправить это так:

for(i=0; i<all_values.length; i++) {
        $.ajax({
            type: "GET",
            async: true,
            dataType: 'json',
            url: "https://www.google.com/inputtools/request?text="+all_values[i]+"&ime=transliteration_en_"+"<?php echo $code; ?>"+"&num=5&cp=0&cs=0&ie=utf-8&oe=utf-8&app=jsapi&uv",
            success: function (data) {
                $("#"+modal_field_prefix+"<?php echo $lang; ?>").val( data[1][0][1][0] +"، "+ $("#"+modal_field_prefix+"<?php echo $lang; ?>").val() );

                $("#"+modal_field_prefix+"<?php echo $lang; ?>").val( $("#"+modal_field_prefix+"<?php echo $lang; ?>").val().replace(/(^[،\s]+)|([،\s]+$)/g, '')  );        
            }
        });

Также вы можете прочитать эту ссылку, чтобы узнать все об асинхронном JavaScript.

https://www.codementor.io/aminmeyghani/learn-asynchronous-javascript-in-2018-fmbib9obw

0 голосов
/ 04 июля 2018

Используйте toString перед заменой функции следующим образом:

$("#"+modal_field_prefix+"<?php echo $lang; ?>").val($("#"+modal_field_prefix+"<?php echo $lang; ?>").val().toString().replace(/(^[،\s]+)|([،\s]+$)/g, '')  );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...